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'))
这个底部没有。
我缺少什么?
答案 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'))