to_sql pandas方法更改sqlite表的方案

2024-04-30 04:30:13 发布

您现在位置:Python中文网/ 问答频道 /正文

当我使用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


Tags: totextnamesqlifschemacreateexists
1条回答
网友
1楼 · 发布于 2024-04-30 04:30:13

从0.14(您正在使用的)开始,sql函数被重构为使用sqlalchemy来改进功能。请参阅此页上的whatsnewdocs
原始的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 fallback选项为这个案例提交了一个问题:https://github.com/pydata/pandas/issues/7355

相关问题 更多 >