to_sql pandas方法更改sqlite表的模式
当我使用 to_sql 方法把 Pandas 的数据框写入我的 SQLite 数据库时,即使我选择了 if_exists='append'
,它还是会改变我表的 .schema
(结构)。比如执行后
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。
1 个回答
9
从0.14版本开始(你正在使用的版本),sql功能进行了重构,改用了sqlalchemy
,这样可以提升功能性。你可以查看一下更新日志和文档了解更多信息。
虽然仍然支持原始的sqlite3连接作为备用选项,但只有sqlite这种类型的数据库在没有sqlalchemy的情况下是可以使用的。
使用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