我有一个大约有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'。“)
答案 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')
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')