2014-06-05 9 views
7

to_sql yöntemini kullanarak Pandalar DataFrame'i SQLite veritabanına yazdığımda, yöntemini kullanıyorum. if_exists='append' kullanıyorum bile tablomun .schema tablosunu değiştirir. yürütmeto_sql pandas yöntemi, sqlite tablolarının düzenini değiştirir

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

orijinal .schema sonra Örneğin:

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

       ); 

nasıl tablonun orijinal düzenini kaydetmek için: için

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 
); 

değişiklikler? 0.14.0, python 2.7.5

+0

ben 'sanmıyorum to_sql 'if_exists'ı destekliyor, bu belge dizelerinde görünmüyor – EdChum

+0

yardım (pd.DataFrame.to_sql) – drastega

+0

üzgünüm hatam, bu bir hata olabilir, o zaman sqlchemy yüklü – EdChum

cevap

6

pandaları kullanıyorum 0.14'den başlayarak (ne kullanıyorsunuz), sql işlevleri, işlevi geliştirmek için sqlalchemy'u kullanmak üzere yeniden yapılandırılır. Bunun için whatsnew ve docs'a bakın.
Ham sqlite3 bağlantısı hala bir geri dönüş olarak desteklenir (ancak sqlalchemy olmadan desteklenen tek sql aroma budur).

Saydamlığı kullanmak sorunu çözmelidir. Bunun için sadece yerine direkt sqlite bağlantısı cnx bir sqlalchemy motoru oluşturabilirsiniz:

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

Ama sqlite cnx düşürme seçeneği ile durum için bir sorun açtı: https://github.com/pydata/pandas/issues/7355

+0

Kodunuzu çalıştırdığımda, /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/sqlalchemy/dialects/sqlite/base.py:860 adresine ulaşıyorum: SAWarning: Type olayı oluşturulamıyor < 'sqlalchemy.sql.sqltypes.INTEGER'> yansıyan argümanlarla [u'4 ']; argüman kullanmadan coltype = self._resolve_type_affinity (type_) – drastega

+0

Gördüğüm bir uyarı, ama aynı zamanda çalışmıyor mu? Eklenen veriler ve şema değişmedi mi? – joris

+0

Çalışıyor! Teşekkürler @joris! – drastega