2012-07-03 15 views
6

Estoy usando pymssql y el paquete Pandas sql para cargar datos de SQL en un Pandas dataframe con frame_query.¿Puedo exportar un marco de datos Python Pandas a MS SQL?

Me gustaría enviarlo de vuelta a la base de datos SQL utilizando write_frame, pero no he podido encontrar mucha documentación al respecto. En particular, hay un parámetro flavor = 'sqlite'. ¿Esto significa que, hasta ahora, los pandas solo pueden exportar a SQLite? Mi empresa está utilizando MS SQL Server 2008, así que necesito exportar a eso.

Respuesta

5

Lamentablemente, sí. En el momento sqlite es el único "sabor" compatible con write_frame. Ver 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 

Escribir un sencillo write_frame debería ser bastante fácil, sin embargo. Por ejemplo, algo como esto podría funcionar (no probado!):

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

Gracias. Encontré que otra opción fácil era usar write_csv para hacer un archivo de texto en mi computadora y luego usar os.system para llamar a BCP. –

1

sólo para salvar a otra persona que intentó utilizar este tiempo. Resulta que la línea:

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

debería ser:

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

Espero que ayude

+0

Eso depende de la base de datos específica que está utilizando, ¿verdad? –

Cuestiones relacionadas