Можете ли вы упростить запрос при использовании шаблонных SQL запросов - PullRequest
0 голосов
/ 20 марта 2020

Есть ли способ упростить это утверждение, а также получить доступ к определенному элементу в кортеже.

l = (1,2,3,4)
sql = "INSERT INTO table1 VALUES ('%s', '%s', '%s', '%s') ON DUPLICATE KEY UPDATE id = 3"
cursor.execute(sql, l)

В нечто более динамичное c - я использую это как пример, но я есть таблица с около 30 столбцами, и это кажется излишним, делая это таким образом. Я также хотел бы обновить некоторые поля, когда есть дубликат ключа. Есть ли способ проиндексировать определенное значение, например третье в списке, и отобразить его так:

l = (1,2,3,4)
sql = "INSERT INTO table1 VALUES ('%s') ON DUPLICATE KEY UPDATE id = {l[2]}"
cursor.execute(sql,l)

Где «l» будет чем-то, что содержит значения, которые будут вставлены в таблица

1 Ответ

1 голос
/ 20 марта 2020

Вы можете создать строку-заполнитель динамически в зависимости от длины кортежа.

l = (1, 2, 3, 4)
placeholders = ",".join(['%s'] * len(l))
sql = f"INSERT INTO table1 VALUES ({placeholders}) ON DUPLICATE KEY UPDATE id = 3"
cursor.execute(sql, l)

Кстати, не называйте вашу переменную list, которая заменит функцию stanfard list().

...