2012-07-03 87 views
6

我正在使用pymssql和Pandas sql包将数据从SQL加载到带有frame_query的Pandas dataframe中。我可以将Python Pandas数据框导出到MS SQL吗?

我想用write_frame将它发送回SQL数据库,但是我一直没有找到关于此的很多文档。特别是,有一个参数flavor ='sqlite'。这是否意味着到目前为止,Pandas只能导出到SQLite?我公司正在使用MS SQL Server 2008,所以我需要导出到那个。

回答

5

不幸的是,是的。目前sqlitewrite_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() 
+0

感谢。我发现另一个简单的选择是使用write_csv在我的计算机上创建一个文本文件,然后使用os.system调用BCP。 –

1

只是为了救别人谁试图利用此一段时间。原来该行:

wildcards = ','.join(['?'] * len(frame.columns)) 

应该是:

wildcards = ','.join(['%s'] * len(frame.columns)) 

希望帮助

+0

这取决于你正在使用的特定数据库,对吧? –

相关问题