我正在使用pymssql
Pandas sql 包将数据从 SQL 加载到dataframe
带有 frame_query 的 Pandas 中。
我想使用 write_frame 将它发送回 SQL 数据库,但我找不到太多关于此的文档。特别是有一个参数flavor='sqlite'。这是否意味着到目前为止 Pandas 只能导出到 SQLite?我的公司正在使用 MS SQL Server 2008,所以我需要导出到那个。
我正在使用pymssql
Pandas sql 包将数据从 SQL 加载到dataframe
带有 frame_query 的 Pandas 中。
我想使用 write_frame 将它发送回 SQL 数据库,但我找不到太多关于此的文档。特别是有一个参数flavor='sqlite'。这是否意味着到目前为止 Pandas 只能导出到 SQLite?我的公司正在使用 MS SQL Server 2008,所以我需要导出到那个。
不幸的是,是的。目前sqlite
是唯一支持的“风味” write_frame
。见https://github.com/pydata/pandas/blob/master/pandas/io/sql.py#L155
def write_frame(frame, name=None, con=None, flavor='sqlite'):
"""
Write records stored in a DataFrame to SQLite. The index will currently be
dropped
"""
if flavor == 'sqlite':
schema = get_sqlite_schema(frame, name)
else:
raise NotImplementedError
不过,写一个简单的write_frame
应该相当容易。例如,这样的事情可能会起作用(未经测试!):
import pymssql
conn = pymssql.connect(host='SQL01', user='user', password='password', database='mydatabase')
cur = conn.cursor()
# frame is your dataframe
wildcards = ','.join(['?'] * len(frame.columns))
data = [tuple(x) for x in frame.values]
table_name = 'Table'
cur.executemany("INSERT INTO %s VALUES(%s)" % (table_name, wildcards), data)
conn.commit()
只是为了拯救其他试图使用它一段时间的人。原来这条线:
wildcards = ','.join(['?'] * len(frame.columns))
应该:
wildcards = ','.join(['%s'] * len(frame.columns))
希望有帮助