0

私は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.警告: 一度に実行できるステートメントは 1 つだけです。

「;」を削除すると 私はこれを得る:

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

sqlite3.OperationalError:「UPDATE」付近:構文エラー

それで、何が起こっているのですか?そして、タイトル名がわかりません。ごめん...

4

2 に答える 2

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)))

私はこれをテストできないので、間違いを犯した可能性があります。これは、何が起こっているのかを知るための単なるアプローチです。

于 2016-12-10T04:36:46.560 に答える
0
  1. Python{num}フォーマットを使用しないでください。SQL を正しく引用できません。?代わりにプレースホルダーを使用します。

    c.executemany('INSERT INTO stocks VALUES (?,?)', (12, 'ウイスキー'))

  2. サブ選択を個別に行い、値を確認してから、より大きな SQL ステートメントでそれらを使用します。これは、より明確で単純です。

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

于 2014-07-02T15:38:17.583 に答える