4

プログラム内で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 つずつ更新する必要がありますか? しかし、私はそれを試したと確信しており、同様のエラーが発生しましたか? メモしてなかったけど。

4

1 に答える 1

10
params = [(str(keywords[i]), date, time, position[i]) for i in range(20)]
于 2012-04-16T19:29:54.113 に答える