複数の行をPythonでSQLite DBに挿入しようとしています。SQLite複数の挿入でクエリ構文エラー
UniversityA:
- ID
- COURSE_NAME
- course_code
- course_prefix
UniversityB:私は3つのテーブルを持っている
- ID
- COURSE_NAME
- course_code
- course_prefix
CourseMap:
- universityA_id(universityAからの参照番号)
- universityB_id(universityBからの参照番号)
- はis_flagged(ブール値0/1)
私はこの構文で簡単にCourseMapテーブルに単一のレコードを追加することができます。
cur.execute('INSERT INTO CourseMap (universityA_id, universityB_id, is_flagged) VALUES ((SELECT id from universityA WHERE course_code=301 AND course_prefix="AERO"), (SELECT id from universityB WHERE course_code=101 AND course_prefix="ARCH"), 0)')
をしかし、私はexecutemany()
を使用して複数の挿入を実行するために、リストにこの文を組み込むしようとすると、私は構文エラーを取得します:最初の挿入時に右ブールis_flagged
値の前に配置キャレットと、:私は取得しています
equivs = [
((SELECT id from universityA WHERE course_code=301 AND course_prefix="AERO"), (SELECT id from universityB WHERE course_code=101 AND course_prefix="ARCH"), 0),
((SELECT id from universityA WHERE course_code=301 AND course_prefix="AERO"), (SELECT id from universityB WHERE course_code=101 AND course_prefix="ARCH"), 0),
((SELECT id from universityA WHERE course_code=301 AND course_prefix="AERO"), (SELECT id from universityB WHERE course_code=101 AND course_prefix="ARCH"), 0)
]
# Fill the table
cur.executemany('INSERT INTO courseMap (universityA_id, universityB_id, is_flagged) VALUES (?,?,?)', equivs)
エラーは、「無効な構文構文エラー」です。
executemany()
に複数の挿入構文がありますか?私のSQLite 3のバージョンは3.10.0です。
'equivs'宣言のselect文は文字列であるはずですか? – glibdud
私が考えているのは、プラグインされるINSERTステートメントが文字列であるためではないということです。「equivs」の項目は引用符で囲まなければなりませんか? – Marcatectura
はい。私はそれが 'executemany'ステートメントにも届く前に、どのように構文エラーを*得られなかったか分かりません。 – glibdud