[英]Database engine fails to connect to a sql-server instance while trying to insert using to_sql function
[英]Error while insert dataframe to Sql-server DB using to_sql function in python
我试图使用dataframe.to_sql函数将pandas dataframe df插入SQL Server DB。 但我得到以下错误:
源代码:
import pyodbc
import sqlalchemy
import urllib
df #sample dataframe
params = urllib.parse.quote_plus("DRIVER={SQL Server};SERVER=GIRSQL.GIRCAPITAL.com;DATABASE=Tableau;UID=SQL_User;PWD=pass")
engine = sqlalchemy.create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)
engine.connect()
df.to_sql(name='[Tableau].[dbo].[Test table]',con=engine, index=False,
if_exists='append')
错误:
文件“C:\\ Users \\ Arvinth \\ sqlalchemy \\ engine \\ default.py”,第470行,在do_execute cursor.execute(语句,参数)中
sqlalchemy.exc.ProgrammingError:(pyodbc.ProgrammingError)('42000',“[42000] [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]'INTEGER'附近的语法不正确。(102)(SQLExecDirectW)”)[SQL :'\\ n \\ nCREATE TABLE [[Tableau]。[dbo]。[Test table]](\\ n \\ t [A] INTEGER NULL,\\ n \\ t [B] INTEGER NULL,\\ n \\ t [C] INTEGER NULL \\ N)\\ n \\ n']
示例数据帧:
A B C
0 0 0 0
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
5 5 5 5
6 6 6 6
7 7 7 7
任何人都可以帮助解决问题。
如上所述,您在pandas的to_sql
调用'[Tableau]。[dbo]。[Test table]'中引用了表名 arg的数据库名称和dbo
模式,并将名称括起来,在sqlAlchemy引擎的CREATE TABLE
SQL中呈现错误呼叫。 由于当前连接是引用的数据库而默认模式是dbo
,因此不需要名称中的两个限定符: `'[Tableau]。[dbo]。 “
因此,在df.to_sql
,只需引用表名而不括号转义:
df.to_sql(name='Test table', con=engine, index=False, if_exists='append')
这将在连接的Tableau
数据库的默认dbo
架构中创建所需的表:
CREATE TABLE [Test table] (
[A] INTEGER NULL,
[B] INTEGER NULL,
[C] INTEGER NULL
);
也许你可以在to_sql()
引用表:
df.to_sql('test_table',con=engine, index=False, if_exists='append')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.