Python:将Pandas Dataframe写入MSSQL - >数据库错误

时间:2018-01-08 16:21:51

标签: python sql-server database pandas dataframe

我有一个大约有20k行和20列的pandas数据帧。我想将它写入MSSQL中的表。

我已成功建立连接:

connection = pypyodbc.connect('Driver={SQL Server};' 
                              'Server=XXX;' 
                              'Database=line;' 
                              'uid=XXX;' 
                              'pwd=XXX')

cursor = connection.cursor()

我正在尝试使用以下代码将我的pandas数据帧写入MSSQL服务器:

df_EVENT5_16.to_sql('MODREPORT', connection, if_exists = 'replace')

但是我收到以下错误:

  

DatabaseError:sql'SELECT name FROM sqlite_master上的执行失败   WHERE type ='table'AND name =?;':('42S02',“[42S02] [Microsoft] [ODBC]   SQL Server驱动程序] [SQL Server]无效的对象名称'sqlite_master'。“)

2 个答案:

答案 0 :(得分:5)

现代Pandas版本期望SQLAlchemy engine作为连接,因此请使用SQLAlchemy:

app.listen(...)

然后:

from sqlalchemy import create_engine

con = create_engine('mssql+pyodbc://username:password@myhost:port/databasename?driver=SQL+Server+Native+Client+10.0')

来自DataFrame.to_sql() docs

  

con :SQLAlchemy引擎或DBAPI2连接(传统模式)

     

使用SQLAlchemy可以使用该库支持的任何数据库。

     

如果是DBAPI2对象,则仅支持sqlite3。

答案 1 :(得分:0)

无需使用pyodbc与MSSQL连接,SQL Alchemy将为您完成此任务。 而且我们也可以将数据帧直接插入数据库中,而无需使用to_sql()方法迭代数据帧。这是适合我的代码-

# To insert data frame into MS SQL database without iterate the data-frame
import pandas as pd
from sqlalchemy import create_engine, MetaData, Table, select
from six.moves import urllib
params = urllib.parse.quote_plus("DRIVER={SQL 
Server};SERVER=serverName;DATABASE=dbName;UID=UserName;PWD=password")
engine = sqlalchemy.create_engine("mssql+pyodbc:///?odbc_connect=%s" % params) 
engine.connect() 
# suppose df is the data-frame that we want to insert in database
df.to_sql(name='table_name',con=engine, index=False, if_exists='append')