/ / Актуализиране на множество SQLite редове, дадени колони и данни - python, python-2.7, sqlite

Актуализиране на множество SQLite редове, дадени колони и данни - python, python-2.7, sqlite

Бих искал да мога да актуализирам няколко 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)