Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Python向SQLite插入日期字符串会产生意外结果_Python_Sqlite - Fatal编程技术网

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

从Python向SQLite插入日期字符串会产生意外结果,python,sqlite,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().st

正如标题所述,我正在尝试将格式化为字符串的日期插入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”是一个VARCHAR255,日期格式不应成为问题。我认为这仅仅是一个字符串被存储到一个字符串中或足够近

有人能告诉我为什么这不能按预期工作吗

以下是“跟踪器”和“日期”表的创建方法,以供参考:

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`));

非常感谢您的帮助。

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

'2018-10-24'
下面是一个如何使用准备好的语句进行正确插入的示例:

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

问题在于,您在插入2018-10-24时没有使用单引号或双引号。这对SQLite来说没有任何意义。我建议你在这里使用事先准备好的语句,你可能会读到。你的意思是“+today\u date+”不。。。c、 executeINSERT进入日期-日期-日期id值,“+today_DATE”,与c.executeINSERT进入日期-日期id值,“+today_DATE+”@MadisonCourto阅读。允许在元组末尾使用尾随逗号。“executemany”实际上按原样工作。虽然约会部分做得很好,谢谢你的帮助。我想得太多了!