给定列和数据更新多个SQLite行

时间:2016-04-27 19:49:22

标签: 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)

1 个答案:

答案 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)