我正在使用pymssql
和Pandas sql包将数据从SQL加载到带有frame_query的Pandas dataframe
中。我可以将Python Pandas数据框导出到MS SQL吗?
我想用write_frame将它发送回SQL数据库,但是我一直没有找到关于此的很多文档。特别是,有一个参数flavor ='sqlite'。这是否意味着到目前为止,Pandas只能导出到SQLite?我公司正在使用MS SQL Server 2008,所以我需要导出到那个。
我正在使用pymssql
和Pandas sql包将数据从SQL加载到带有frame_query的Pandas dataframe
中。我可以将Python Pandas数据框导出到MS SQL吗?
我想用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))
希望帮助
这取决于你正在使用的特定数据库,对吧? –
感谢。我发现另一个简单的选择是使用write_csv在我的计算机上创建一个文本文件,然后使用os.system调用BCP。 –