2017-08-15 70 views
4

我正嘗試使用dataframe.to_sql函數將pandas dataframe df插入到SQL Server數據庫中。但我得到以下錯誤:使用python中的to_sql函數將數據框插入到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 

誰能請幫助解決問題。

+1

這不是必需的* [Tableau]。[dbo]。*當您連接到* Tableau *並且默認架構是* dbo *。只需傳遞表名:'df.to_sql(name ='Test table',con = engine,index = False, if_exists ='append')' – Parfait

+0

它的工作正常。非常感謝! –

回答

3

至於評論,你所引用的數據庫名稱和dbo架構在大熊貓表 ARG to_sql呼籲‘[的Tableau] [DBO]。[測試表]’和括號的名字,渲染sqlAlchemy引擎的CREATE TABLE SQL調用中出現錯誤。由於當前連接引用的數據庫和默認模式爲dbo,因此不需要名稱中的兩個限定符:`[Tableau]。[dbo]。

因此,在df.to_sql,簡單地引用該表的名稱,而無需支架轉義:

CREATE TABLE [Test table] (
    [A] INTEGER NULL, 
    [B] INTEGER NULL, 
    [C] INTEGER NULL 
); 

df.to_sql(name='Test table', con=engine, index=False, if_exists='append') 

將在連接Tableau數據庫的默認dbo模式中創建所需要的表

-2

也許你可以參考to_sql()中的表格:

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

這也是在接受的答案中提到的。如果您有針對同一問題的其他解決方案,請僅添加新答案。 – rene

相關問題