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

5
我有一个包含大约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')

但我收到以下错误信息:

数据库错误:执行 SQL“SELECT name FROM sqlite_master WHERE type='table' AND name=?;”失败:('42S02',"[42S02] [Microsoft][ODBC SQL Server Driver][SQL Server]无效的对象名称 'sqlite_master'。")


1
你需要使用SQLAlchemy连接来进行to_sql操作,而不是使用原始的DB-API连接。 - Parfait
另外,pypyodbc 可能没有 alchemy 层,但是 pyodbc 有。 - Parfait
2个回答

12

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

from sqlalchemy import create_engine

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

然后:

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

来自DataFrame.to_sql()文档

con:SQLAlchemy引擎或DBAPI2连接(旧版模式)

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

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


谢谢。我需要先安装SQLAlchemy吗?另外,在你的“mssql+pyodbc”语句之后,是什么意思:scott是什么?tiger是什么?mydsn是什么? - PineNuts0
@PineNuts0,您可能想要查看这个答案 - MaxU - stand with Ukraine

3
不需要使用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')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接