簡體   English   中英

使用python中的to_sql函數將數據幀插入Sql-server DB時出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM