プログラム内でexecutemanyを使用して、一度に20個のレコードを保存したいと考えています。ドキュメントに記載されている内容は次のとおりです...
c.executemany(
"""INSERT INTO breakfast (name, spam, eggs, sausage, price)
VALUES (%s, %s, %s, %s, %s)""",
[
("Spam and Sausage Lover's Plate", 5, 1, 8, 7.95 ),
("Not So Much Spam Plate", 3, 2, 0, 3.95 ),
("Don't Wany ANY SPAM! Plate", 0, 4, 3, 5.95 )
] )
ただし、リストに値があり、リストのインデックスを使用して、上記の 18 バージョンを実行したくありません。
ここに私のコードがあります...
db = connect_to_db()
cursor = db.cursor()
sql = "INSERT INTO gkey (keyword, date, time, position) VALUES (%s, %s, %s, %s)"
params = [(str(keywords[0]), date, time, position[0])]
cursor.executemany(sql, params)
db.commit()
これはうまく機能し、日付、時刻、位置とともにリストの最初のキーワードをコミットします。以下のようにパラメーターを 19 回繰り返す必要はありません...
db = connect_to_db()
cursor = db.cursor()
sql = "INSERT INTO gkey (keyword, date, time, position) VALUES (%s, %s, %s, %s)"
params = [
(str(keywords[0]), date, time, position[0])
(str(keywords[0]), date, time, position[0])
(str(keywords[0]), date, time, position[0])
(str(keywords[0]), date, time, position[0])
(str(keywords[0]), date, time, position[0])
(str(keywords[0]), date, time, position[0])
(str(keywords[0]), date, time, position[0])
(str(keywords[0]), date, time, position[0])
(str(keywords[0]), date, time, position[0])
(str(keywords[0]), date, time, position[0])
(str(keywords[0]), date, time, position[0])
(str(keywords[0]), date, time, position[0])
(str(keywords[0]), date, time, position[0])
(str(keywords[0]), date, time, position[0])
(str(keywords[0]), date, time, position[0])
(str(keywords[0]), date, time, position[0])
(str(keywords[0]), date, time, position[0])
(str(keywords[0]), date, time, position[0])
(str(keywords[0]), date, time, position[0])
]
cursor.executemany(sql, params)
db.commit()
私が回避しようとしているものの例の上(私が知っているように動作させるには、インデックスをインクリメントする必要があります!;))
リスト全体を値として渡そうとするとエラーが発生します。一度に 1 つずつ渡す必要があります。アイデアはありますか? 多くの人がこれを実行できますか、それともループを作成して一度に 1 つずつ更新する必要がありますか? しかし、私はそれを試したと確信しており、同様のエラーが発生しましたか? メモしてなかったけど。