我正在使用python3。
self.cur.execute("""INSERT or IGNORE INTO {0}(Konu, KonuAnlatımı, SoruSayısı, ToplamDogru, ToplamYanlıs) VALUES
('{1}', '{2}', '{3}','{4}', '{5}') UPDATE {0} SET (KonuAnlatımı = '{2}'),
SoruSayısı = '{6}',
TaplamDogru = '{7}',
ToplamYanlıs = '{8}'
WHERE Konu = {1}""".format(ders, konu, Çalışıldı, soru, dogru, yanlis,
str(int(soru) + int(self.cur.execute(
"Select SoruSayısı From "+ders+" WHERE Konu = '"+konu+"'").fetchone()[0])),
str(int(dogru) + int(self.cur.execute(
"Select ToplamDogru From "+ders+" WHERE Konu = '"+konu+"'").fetchone()[0])),
str(int(dogru) + int(self.cur.execute(
"Select ToplamYanlıs From "+ders+" WHERE Konu = '"+konu+"'").fetchone()[0]))))
我得到一个错误:
"Select ToplamYanlıs From "+ders+" WHERE Konu = '"+konu+"'").fetchone()[0]))))
sqlite3.Warning:您一次只能执行一条语句。
如果我删除';'我明白了:
"Select ToplamYanlıs From "+ders+" WHERE Konu = '"+konu+"'").fetchone()[0]))))
sqlite3.OperationalError:near" UPDATE":语法错误
那发生了什么?我还没有找到标题名称。对不起......
答案 0 :(得分:1)
我建议首先将其分解为较小的部分,以便进行调试,并在每个部分按预期工作时再次构建它。
对于此示例,我已经冒昧地使用视觉上类似的ASCII版本替换非ASCII字符。
SoruSayisi = self.cur.execute(
"SELECT SoruSayisi From {} WHERE Konu = ?".format(ders), konu
).fetchone()[0]
TaplamDogru = self.cur.execute(
"SELECT ToplamDogru From {} WHERE Konu = ?".format(konu), konu
).fetchone()[0]
ToplamYanlis = self.cur.execute(
"SELECT ToplamYanlis FROM {} WHERE Konu = ?".format(konu), konu
) .fetchone()[0]
self.cur.execute("""\
INSERT or IGNORE INTO {0}
(Konu, KonuAnlatımı, SoruSayisi, ToplamDogru, ToplamYanlis)
VALUES (?, ?, ?, ?, ?)""".format(ders),
konu,
Calisildi,
soru,
dogru,
yanlis)
self.cur.execute("""
UPDATE {0}
SET KonuAnlatımı = ?,
SoruSayisi = ?,
TaplamDogru = ?,
ToplamYanlis = ?
WHERE Konu = {1}""".format(ders),
Calisildi,
str(int(soru) + int(SoruSayisi)),
str(int(dogru) + int(TaplamDogru)),
str(int(dogru) + int(ToplamYanlis)))
由于我无法测试,我可能犯了错误。这只是一种了解正在发生的事情的方法。
答案 1 :(得分:0)
不要使用Python {num}
格式,它不能正确引用SQL。请改用?
占位符:
c.executemany('INSERT INTO stock VALUES(?,?)',(12,'威士忌'))
分别选择sub,验证值,然后在较大的SQL语句中使用它们 - 它更清晰,更简单。