使用Python无法在sqlite中插入记录

0 投票
4 回答
1402 浏览
提问于 2025-04-15 14:24

我在用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 个回答

0

你确定你遇到的是同样的错误吗?如果你没有修改你的数据库结构,那么你新的插入语句会失败,原因是“sms_date”和“sms_time”这两个字段应该是“ms_date”和“ms_time”。如果你能把你的数据库结构给我们看看,可能会更有帮助。你可以通过命令行来查看,方法是:

sqlite3 mydb '.schema filer_filer'

1

在给 ins_str 赋值的时候,你好像把单引号用错了:一个在开头,另一个在 values ( 后面,也就是在 752098 前面,等等。你似乎在用 Eclipse(虽然你没有提到,但错误信息显示你在用这个),所以你遇到的错误是因为 Eclipse 插件试图理解这种语法,这种情况有点奇怪。不过如果你用的是 Python,通常会给你一个简单明了的 SyntaxError 错误——不管你觉得你在用单引号做什么,其实是行不通的。你可以试试用 双引号 来代替单引号,也就是在字符串的开头和结尾用 " 而不是 ',这样里面的单引号就能保留下来,并且传递给 sqlite 了……

1

这可能是因为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... '

撰写回答