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