SQLite3 未知错误
我正在使用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: 在"UPDATE"附近:语法错误
那么到底发生了什么呢?我还没找到标题名称,抱歉...
2 个回答
0
不要使用 Python 的
{num}
格式化,因为这样在 SQL 中引用会出错。应该使用?
作为占位符,比如:c.executemany('INSERT INTO stocks VALUES (?,?)', (12, 'whiskey'))
把子查询单独做,先确认这些值,然后再把它们放到更大的 SQL 语句中——这样会更清晰、更简单。
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)))
因为我无法测试这个,所以可能会有错误。这只是一个了解情况的方法。