gpt4 book ai didi

python - 在python中使用to_sql函数将数据帧插入Sql-server DB时出错

转载 作者:太空宇宙 更新时间:2023-11-03 10:53:29 24 4
gpt4 key购买 nike

我正在尝试使用 dataframe.to_sql 函数将 pandas dataframe df 插入到 SQL Server 数据库中。但我得到以下错误:

源代码:

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 调用中引用了表 name arg 的数据库名称和 dbo 模式 '[ Tableau].[dbo].[Test table]' 并将名称括起来,在 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
);

关于python - 在python中使用to_sql函数将数据帧插入Sql-server DB时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45697732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com