我希望能够在给定列列表和数据列表列表的情况下更新多个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)
答案 0 :(得分:2)
您不应该为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)