to_sql pandas方法更改sqlite表的方案
问题内容:
当我使用to_sql方法将Pandas
DataFrame写入SQLite数据库时.schema
,即使使用,它也会更改表的if_exists='append'
。例如执行后
with sqlite3.connect('my_db.sqlite') as cnx:
df.to_sql('Resolved', cnx, if_exists='append')
原件.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
);
更改为:
CREATE TABLE Resolved (
[Name] TEXT,
[Count] INTEGER,
[Obs_Date] TEXT,
[Bessel_year] REAL,
[Filter] TEXT,
[Comments] TEXT
);
如何保存表格的原始方案?我使用pandas 0.14.0,Python 2.7.5
问题答案:
从0.14开始(使用的是什么),将sql函数重构为用于sqlalchemy
改善功能的`
。请参阅whatsnew和相关文档。
仍然支持将原始sqlite3连接作为后备(但这是不带sqlalchemy的唯一受支持的sql风格)。
使用sqlalchemy应该可以解决问题。为此,您可以创建一个sqlalchemy引擎,而不是直接的sqlite连接cnx
:
engine = sqlalchemy.create_engine('sqlite:///my_db.sqlite')
df.to_sql('Resolved', engine, if_exists='append')
但是我使用sqlite
cnx后备选项对该案提出了一个问题:https :
//github.com/pydata/pandas/issues/7355