当我尝试使用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)"
答案 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()
感谢。