2014-06-05 11 views
7

Quando scrivo Pandas dataframe al mio database SQLite usando to_sql metodo cambia il .schema del mio tavolo, anche se io uso if_exists='append'. Per esempio dopo l'esecuzionemetodo panda to_sql cambia lo schema di tabelle SQLite

with sqlite3.connect('my_db.sqlite') as cnx: 
    df.to_sql('Resolved', cnx, if_exists='append') 

originale .schema:

CREATE TABLE `Resolved` (
`Name` TEXT NOT NULL COLLATE NOCASE, 
`Count` INTEGER NOT NULL, 
`Obs_Date` TEXT NOT NULL, 
`Bessel_year` REAL NOT NULL, 
`Filter` TEXT NOT NULL, 
`Comments` TEXT COLLATE NOCASE 
); 

modifiche:

CREATE TABLE Resolved (
        [Name] TEXT, 
    [Count] INTEGER, 
    [Obs_Date] TEXT, 
    [Bessel_year] REAL, 
    [Filter] TEXT, 
    [Comments] TEXT 

       ); 

Come salvare lo schema originale del mio tavolo? Io uso panda 0.14.0, Python 2.7.5

+0

Non credo che ' to_sql' supporta il parametro 'if_exists', non compare nelle stringhe doc – EdChum

+0

help (pd.DataFrame.to_sql) – drastega

+0

scusa il mio errore, questo potrebbe essere un bug allora, hai sqlalchemy installato – EdChum

risposta

6

A partire da 0.14 (quello che si sta utilizzando), le funzioni SQL sono riscritta per usare sqlalchemy per migliorare la functionality`. Vedere lo whatsnew e docs su questo.
La connessione raw sqlite3 è ancora supportata come fallback (ma questo è l'unico sapore sql supportato senza sqlalchemy).

L'utilizzo di sqlalchemy dovrebbe risolvere il problema. Per questo si può solo creare un motore di sqlalchemy al posto della connessione SQLite diretta cnx:

engine = sqlalchemy.create_engine('sqlite:///my_db.sqlite') 
df.to_sql('Resolved', engine, if_exists='append') 

Ma ho presentato un problema per il caso con l'opzione sqlite CNX ripiego: https://github.com/pydata/pandas/issues/7355

+0

Quando eseguo il codice ottengo /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/sqlalchemy/dialects/sqlite/base.py:860: SAWarning: Non è possibile creare un tipo di istanza < class 'sqlalchemy.sql.sqltypes.INTEGER'> con argomenti riflessi [u'4 ']; non usare argomenti. coltype = self._resolve_type_affinity (type_) – drastega

+0

È un avvertimento che vedo, ma non funziona anche? I dati sono stati aggiunti e lo schema non è cambiato? – joris

+0

Funziona! Grazie @joris! – drastega

Problemi correlati