从Python将日期字符串插入SQLite会产生意外结果

时间:2018-10-24 02:46:13

标签: python sqlite

正如标题所述,我正在尝试将日期(格式化为字符串)插入SQLite数据库。此方法有效,但是日期未在SQLite中正确显示。

这是我的代码的子集:

print("Connecting to the database...")        
sqlite_file = './sqlite_db/cfr_changes.db'
conn = sqlite3.connect(sqlite_file)
c = conn.cursor()


today_date = datetime.now().strftime("%Y-%m-%d")
print(today_date)
print("Inserting tracker into database...")

c.execute("INSERT INTO DATE (`date_id`) VALUES(" + today_date + ")")
c.executemany("INSERT INTO TRACKER (`cfr_status`, `comment`, `mdu`, `iwb`, `obsolete`, `date_id`) VALUES(?,?,?,?,?, " + today_date + ")", list(tracker_df.to_records(index=False)))
#print(c.fetchall())

conn.commit()
conn.close()

打印'today_date'返回我期望的结果:

2018-10-24

但是,当我通过终端检查SQLite中的记录时,日期显示为:

1984

请注意,“ date_id”是VARCHAR(255),日期格式不应该成为问题。我认为这只是将一个字符串存储到一个字符串中(或足够接近)。

有人可以告诉我为什么这不能按预期进行吗?

作为参考,以下是创建“ TRACKER”和“ DATE”表的方式:

CREATE TABLE `DATE` (
`date_id` VARCHAR(255) NOT NULL PRIMARY KEY);

CREATE TABLE `TRACKER` (
`tracker_id` INTEGER NOT NULL PRIMARY KEY,
 `cfr_status` VARCHAR(255) NOT NULL,
`mdu` BOOLEAN, `iwb` BOOLEAN,
`obsolete` BOOLEAN, `comment` VARCHAR(255), `date_id` VARCHAR(255) NOT NULL, FOREIGN KEY (`date_id`) REFERENCES DATE(`date_id`));

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

问题在于,您只是将变量连接到插入语句中,而不必担心它们的格式是否有意义。例如,要将日期文字插入SQLite,您应该使用以下代码:

'2018-10-24'

下面是一个示例,说明如何使用准备好的语句进行正确的插入:

today_date = datetime.now().strftime("%Y-%m-%d")
c.execute("INSERT INTO DATE (date_id) VALUES (?)", ("'" + today_date + "'",))