简单的问题可能有一个非常简单的答案。我正在从Python脚本中将格式为“2012-06-10”的日期字符串写入TEXT列。
e.g。
cur.execute("CREATE TABLE tbl(date TEXT, ...)") cur.execute('INSERT INTO tbl VALUES(%s)' % (str(date[i])), ...)
该脚本实际上是评估日期字符串,因此“2012-06-10”会以“1996”的形式写入表中。从阅读文档,我猜这与类型亲和力有关,但我无法想象如何覆盖甚至为什么要对字符串进行评估。
答案 0 :(得分:9)
两种方式:
cur.execute("INSERT INTO tbl VALUES (?), [str(date[i])])
。这是最好的方法。这样做吧。第二种方法仅包括后人。cur.execute("INSERT INTO tbl VALUES ('%s')" %(str(date[i]), )
。这种方法不是最理想的,因为除非你小心,否则你很容易受到SQL注入的攻击。</ li>
要理解为什么会这样,想象一下您的代码发送给SQLite的查询:
INSERT INTO tbl VALUES (2012-06-10);
SQL引擎正确评估的位置为:
INSERT INTO tbl VALUES (1996);
引用该值将解决此问题:
INSERT INTO tbl VALUES ('2012-06-10');
但是如果值中包含某些字符('
或空字节之类的字符),则会导致问题。
但是,使用参数化查询时,这些值会与查询分开发送,因此不会被误解。