Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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,这个上面的有效 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',

这个上面的有效

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'))

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

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

您应该将准备好的语句与位置参数一起使用:

c.execute("INSERT INTO {tn} (USERNAME, CREATED_DATE) VALUES ('{nm}', '{dt}')".format(tn='REDDIT_USER', nm='John', dt='09-09-17'))
关于将表名作为参数,这是不可能的,即使是从一个准备好的语句。通常,大多数查询不会在不同的表上运行。并且允许像这样更改表名可能会带来安全风险。如果需要查询两个不同的表,那么为这些表创建两个准备好的语句

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

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

实际上,虽然这可能会执行,但几乎可以肯定的是,它不是要插入到SQLite数据库中的日期数据。日期以常规文本形式存储,并且几乎应始终以ISO格式存储,年份后跟月份和日期。例如,您可以使用
'2017-09-08'
作为日期文字,但不要使用
'08-09-17'

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

c.execute("INSERT INTO {tn} (USERNAME, CREATED_DATE) VALUES ('{nm}', '{dt}')".format(tn='REDDIT_USER', nm='John', dt='09-09-17'))
关于将表名作为参数,这是不可能的,即使是从一个准备好的语句。通常,大多数查询不会在不同的表上运行。并且允许像这样更改表名可能会带来安全风险。如果需要查询两个不同的表,那么为这些表创建两个准备好的语句

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

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

实际上,虽然这可能会执行,但几乎可以肯定的是,它不是要插入到SQLite数据库中的日期数据。日期以常规文本形式存储,并且几乎应始终以ISO格式存储,年份后跟月份和日期。例如,您可以使用
'2017-09-08'
作为日期文字,但不要使用
'08-09-17'

顺便说一句,我之所以要使用底部文字,是因为我将传入一些将更改的参数。我不能让它们像上面的一样恒定。你的错误是什么?如果您忘记在列值周围加引号,这将对您有所帮助。此外,不应以这种方式插入。相反,你需要使用参数。你能给我一个例子,你的意思是我应该做什么@mshsayemSee下面是Tim的答案。顺便说一句,我之所以要做下面的一个,是因为我要传递一些会改变的参数。我不能让它们像上面的一样恒定。你的错误是什么?如果您忘记在列值周围加引号,这将对您有所帮助。此外,不应以这种方式插入。相反,你需要使用参数。你能给我一个例子,你的意思是我应该做什么@Mshsayemse下面是Tim的答案。是的,日期只是一般性的,我有一个合适的日期格式。但我会继续尝试你的建议,谢谢你的建议!是的,日期只是一般的,我有一个合适的日期格式。但我会继续尝试你的建议,谢谢你的建议!