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

时间:2009-09-18 05:00:24

标签: 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()

...

我收到以下错误

str:Traceback(最近一次调用最后一次):   文件“C:\ eclipse \ plugins \ org.python.pydev.debug_1.4.8.2881 \ pysrc \ pydevd_vars.py”,第340行,in    evaluateExpression

result = eval(expression, updated_globals, frame.f_locals)

档案“”,第1行

 except
      ^

SyntaxError:解析时的意外EOF

加特

修改

我的新插入语句如下所示

"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 :(得分:1)

它可能是SO代码块显示的工件,但您似乎缺少SQL字符串值的引号。

如果是这种情况,您可以通过简单地使用ins_str变量的双引号来解决问题。

修改 我的解释令人困惑。如果我误导你,我道歉。现在更详细:

Python字符串文字可以使用单引号的双引号;以下作业是等效的。

  myString = 'Hello World'
  myString = "Hello World"

SQL语法(与Python无关)需要单引号(无选择)作为其字符串变量。因此,对Python字符串本身使用双引号是个好主意,因为SQL内容的单引号不会干扰。

因此你可以使用这个(正如亚历克斯所建议的那样;我也是第二个选择)

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

答案 1 :(得分:1)

ins_str的作业中,您似乎错误地使用单引号:一个在开头,另一个在values (之后和752098之前,依此类推,等等向前。你似乎正在使用Eclipse(即使你没有提到它,错误信息表明它),所以你在Eclipse插件试图理解这种语法时得到的错误是特殊的,但Python本身会给你一个很好的普通老SyntaxError - 无论你认为你用单引号做什么,它都不会起作用。如何在字符串的开头和结尾使用 double 引号而不是单引号"而不是',以便保留并传递其中的单引号sqlite ...?

答案 2 :(得分:0)

您确定收到同样的错误吗?除非您还更改了模式,否则新的insert语句将失败,因为字段“sms_date”和“sms_time”应为“ms_date”和“ms_time”。如果您向我们展示您的架构,可以提供帮助,您可以通过命令行执行以下操作:

sqlite3 mydb '.schema filer_filer'

答案 3 :(得分:0)

对不起伙计们,我修好了!我的代码上有一个拼写错误 - 执行而不是执行;

我的原始代码看起来像这样

try:
   db.excute(ins_str) # Notice the typo on the method execute. written as excute instead of execute
except:
    db.close()

感谢。