使用 python 中的 to_sql 函数将数据帧插入 Sql-server DB 时出错
Error while insert dataframe to Sql-server DB using to_sql function in python
我正在尝试使用 dataframe.to_sql 函数将 pandas 数据帧 df 插入 SQL 服务器数据库。但我得到以下错误:
源代码:
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')
错误:
File "C:\Users\Arvinth\sqlalchemy\engine\default.py", line 470, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError) ('42000', "[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 'INTEGER'. (102) (SQLExecDirectW)") [SQL: '\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
中为 table name arg 引用了数据库名称和 dbo
架构调用 '[Tableau].[dbo].[Test table]' 并将名称括起来,在 sqlAlchemy 引擎的 CREATE TABLE
SQL 打电话。由于当前连接 是 引用的数据库,默认模式是 dbo
,因此不需要名称中的两个限定符:`'[ Tableau].[dbo].'
因此,在 df.to_sql
中,只需引用 table 名称而不用括号转义:
df.to_sql(name='Test table', con=engine, index=False, if_exists='append')
这将在连接的 Tableau
数据库的默认 dbo
架构中创建所需的 table:
CREATE TABLE [Test table] (
[A] INTEGER NULL,
[B] INTEGER NULL,
[C] INTEGER NULL
);
也许你可以参考to_sql()
中的table:
df.to_sql('test_table',con=engine, index=False, if_exists='append')
我正在尝试使用 dataframe.to_sql 函数将 pandas 数据帧 df 插入 SQL 服务器数据库。但我得到以下错误:
源代码:
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')
错误:
File "C:\Users\Arvinth\sqlalchemy\engine\default.py", line 470, in do_execute cursor.execute(statement, parameters)
sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError) ('42000', "[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 'INTEGER'. (102) (SQLExecDirectW)") [SQL: '\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
中为 table name arg 引用了数据库名称和 dbo
架构调用 '[Tableau].[dbo].[Test table]' 并将名称括起来,在 sqlAlchemy 引擎的 CREATE TABLE
SQL 打电话。由于当前连接 是 引用的数据库,默认模式是 dbo
,因此不需要名称中的两个限定符:`'[ Tableau].[dbo].'
因此,在 df.to_sql
中,只需引用 table 名称而不用括号转义:
df.to_sql(name='Test table', con=engine, index=False, if_exists='append')
这将在连接的 Tableau
数据库的默认 dbo
架构中创建所需的 table:
CREATE TABLE [Test table] (
[A] INTEGER NULL,
[B] INTEGER NULL,
[C] INTEGER NULL
);
也许你可以参考to_sql()
中的table:
df.to_sql('test_table',con=engine, index=False, if_exists='append')