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