【问题标题】:Error while insert dataframe to Sql-server DB using to_sql function in python在 python 中使用 to_sql 函数将数据帧插入 Sql-server DB 时出错
【发布时间】:2018-01-23 15:54:01
【问题描述】:

我正在尝试使用 dataframe.to_sql 函数将 pandas 数据帧 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 Driver][SQL Server]'INTEGER' 附近的语法不正确。(102) (SQLExecDirectW)" ) [SQL: '\nCREATE TABLE [[Tableau].[dbo].[Test table]] (\n\t[A] INTEGER NULL, \n\t[B] INTEGER NULL, \n\t[C]整数 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

谁能帮忙解决这个问题。

【问题讨论】:

  • 这不是必需的 [Tableau].[dbo]. 因为您正在连接到 Tableau 并且默认架构是 dbo我>。只需传递表名:df.to_sql(name='Test table',con=engine, index=False, if_exists='append')
  • 它工作正常。非常感谢!

标签: python sql-server pandas sql-insert pandas-to-sql


【解决方案1】:

正如评论,您在 pandas'to_sql 调用 '[Tableau].[dbo].[Test table 中引用了表 name arg 的数据库名称和 dbo 架构]' 并将名称括起来,从而在 sqlAlchemy 引擎的 CREATE TABLE SQL 调用中呈现错误。由于当前连接引用的数据库并且默认架构是dbo,因此不需要名称中的两个限定符:`'[Tableau].[dbo]。 s>'

因此,在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
);

【讨论】:

    【解决方案2】:

    也许你可以参考to_sql()中的表格:

    df.to_sql('test_table',con=engine, index=False, if_exists='append')
    

    【讨论】:

    • 在接受的答案中也提到了这一点。仅当您对同一问题有其他解决方案时才添加新答案。
    猜你喜欢
    • 1970-01-01
    • 2022-12-12
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    相关资源
    最近更新 更多