Я хотів би мати можливість оновити кілька SQLiteрядки баз даних надають список стовпців і список списків даних. У мене є робоче рішення, але це зовсім не елегантно. Як я можу це зробити більш ефективно. UPDATE
заяву, оскільки я зосереджуюся лише на побудові запиту.
def update(columns, values):
for value in values:
print ("Update myTable SET " + " ".join([x + " = "%s"," for x in columns]) + " WHERE SSN = "%s"").replace(", WHERE", " WHERE") % (tuple(value))
columns = ["Name", "Age"]
values = [["Jon", 12, "545-45-7987"], ["Sam", 13, "454-78-4545"]]
update(columns, values)
Відповіді:
2 для відповіді № 1Ви не повинні інтерполювати значення для вашого UPDATE
; скоріше, ви повинні використовувати заповнювачі та параметри запиту. Це дозволить уникнути цитування ускладнень і потенційних уразливостей ін'єкції SQL. Щось на зразок:
def update(cursor, columns, values):
for value in values:
sql = "UPDATE myTable SET {} WHERE ssn = ?".format(
", ".join(map("{} = ?".format, columns)))
print(sql)
cursor.execute(sql, values)
columns = ["Name", "Age"]
values = [["Jon", 12, "545-45-7987"], ["Sam", 13, "454-78-4545"]]
cursor = conn.cursor()
update(cursor, columns, values)