使用Python无法在sqlite中插入记录
我在用Python往sqlite里插入记录时遇到了一个错误。
这是我的代码:
import sqlite3
db = sqlite3.connect('mydb')
ins_str = 'insert into filer_filer(number, ms_date, ms_time, mp_code, Amount, recipient_name,recipient_number, Tran_date, Tran_time, balance, userid_id ) values ('752098','09/09/16','17:54:19','K79NN251','5,000',' GWENDA WULFRIC','416','11/9/09','4:23 PM','396', -1)'
try:
db.execute(ins_str)
except:
db.close()
...
我收到以下错误信息:
字符串:追踪(最近的调用最后): 文件 "C:\eclipse\plugins\org.python.pydev.debug_1.4.8.2881\pysrc\pydevd_vars.py",第340行,在 evaluateExpression中
result = eval(expression, updated_globals, frame.f_locals)
文件 "",第1行
except
^
语法错误:解析时意外的文件结束
Gath
编辑
我新的插入语句看起来是这样的:
"insert into filer_filer(number, sms_date, sms_time, mp_code, Amount, recipient_name,recipient_number, Tran_date, Tran_time, balance, userid_id ) values ('+254722752098','09/09/16','17:54:19','K79NN251','5,000',' GEOFFREY NZIOKA','254720425416','11/9/09','4:23 PM','396', -1)"
4 个回答
你确定你遇到的是同样的错误吗?如果你没有修改你的数据库结构,那么你新的插入语句会失败,原因是“sms_date”和“sms_time”这两个字段应该是“ms_date”和“ms_time”。如果你能把你的数据库结构给我们看看,可能会更有帮助。你可以通过命令行来查看,方法是:
sqlite3 mydb '.schema filer_filer'
在给 ins_str
赋值的时候,你好像把单引号用错了:一个在开头,另一个在 values (
后面,也就是在 752098
前面,等等。你似乎在用 Eclipse(虽然你没有提到,但错误信息显示你在用这个),所以你遇到的错误是因为 Eclipse 插件试图理解这种语法,这种情况有点奇怪。不过如果你用的是 Python,通常会给你一个简单明了的 SyntaxError
错误——不管你觉得你在用单引号做什么,其实是行不通的。你可以试试用 双引号 来代替单引号,也就是在字符串的开头和结尾用 "
而不是 '
,这样里面的单引号就能保留下来,并且传递给 sqlite 了……
这可能是因为StackOverflow显示代码块的方式导致的,但你似乎在SQL字符串值周围缺少引号。
如果真是这样,你可以通过简单地将ins_str变量用双引号包起来来解决这个问题。
编辑:我之前的解释可能让你困惑了,如果误导了你我很抱歉。现在我来详细说明一下:
在Python中,字符串可以用双引号或单引号来表示;下面的赋值是等价的。
myString = 'Hello World'
myString = "Hello World"
而SQL语法(与Python无关)要求字符串变量必须用单引号(没有其他选择)。所以,最好在Python字符串中使用双引号,这样SQL部分的单引号就不会互相干扰。
因此,你可以使用这个(正如Alex所建议的,我也支持这个选择)
ins_str = "insert into filer_filer(number, ms_date, ms_time, mp_code, Amount, recipient_name,recipient_number, Tran_date, Tran_time, balance, userid_id ) values ('752098','09/09/16','17:54:19','K79NN251','5,000',' GWENDA WULFRIC','416','11/9/09','4:23 PM','396', -1)"
或者你也可以在SQL变量的每个引号前后使用两个单引号。使用两个单引号是一个转义序列,Python会把它解释为字符串中的一个单引号。
ins_str = 'insert into blah, blah.... values(''752098'', ''09/09/16'', etc... '