使用带有python的sqlite插入INTO

时间:2017-10-30 05:31:52

标签: python sqlite

c.execute("INSERT INTO REDDIT_USER (USERNAME, CREATED_DATE) VALUES ('PHILZEEY', '08-09-17')")

这个顶级作品。

c.execute('INSERT INTO {tn} (USERNAME, CREATED_DATE) VALUES ({nm}, {dt})'.format(tn='REDDIT_USER', nm='John', dt='09-09-17'))

这个底部没有。

我缺少什么?

2 个答案:

答案 0 :(得分:2)

您应该使用带有位置参数的预准备语句:

c.execute("INSERT INTO REDDIT_USER (USERNAME, CREATED_DATE) VALUES (?, ?)", ('John', '2017-09-09'))

关于使表名成为参数,这是不可能的,即使是从准备好的语句中也是如此。通常,大多数查询不会在不同的表上运行。并允许像这样更改表名可能会带来安全风险。如果需要查询两个不同的表,则为这些表创建两个预准备语句。

顺便说一下,你说最上面的一个有效:

c.execute("INSERT INTO REDDIT_USER (USERNAME, CREATED_DATE) VALUES ('PHILZEEY', '08-09-17')")

实际上,虽然这可能执行,但几乎可以肯定的是,您不希望将日期数据插入到SQLite数据库中。日期存储为常规文本,几乎总是以ISO格式存储,包括年份,后跟月和日。例如,您可以使用'2017-09-08'作为日期字面值,但不要使用'08-09-17'

答案 1 :(得分:1)

你的第二个没有插入值的引号。试试这个:

c.execute("INSERT INTO {tn} (USERNAME, CREATED_DATE) VALUES ('{nm}', '{dt}')".format(tn='REDDIT_USER', nm='John', dt='09-09-17'))