簡體   English   中英

SQLite3未知錯誤

[英]SQLite3 Unknown Error

我正在使用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。警告:一次只能執行一個語句。

如果我刪除';' 我得到這個:

"Select ToplamYanlıs From "+ders+" WHERE Konu = '"+konu+"'").fetchone()[0]))))

sqlite3.OperationalError:“更新”附近:語法錯誤

那到底是怎么回事? 而且我還沒有找到標題名稱。 抱歉...

我建議先將其分解為較小的部分,以進行調試,然后在每個部分按預期工作時再次構建它。

在這個示例中,我已經采取自由方式將非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. 不要使用Python {num}格式,它不會正確引用SQL。 使用? 占位符:

    c.executemany('INSERT INTO stocks VALUES(?,?)',(12,'whiskey'))

  2. 分別進行子選擇,驗證值,然后在較大的SQL語句中使用它們-更清楚,更簡單。

https://docs.python.org/3/library/sqlite3.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM