python - 更新多个 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)

最佳答案

您不应该为您的UPDATE插入值;相反,您应该使用占位符和查询参数。这将避免引用复杂性和潜在的 SQL 注入(inject)漏洞。类似于:

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)

关于python - 更新多个 SQLite 行给定的列和数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36899565/

相关文章:

python - Haystack 可以通过 geodjango PointField 进行过滤吗?

Python,第一个列表索引 - 先前的列表索引然后打印

php - SQLite选择多个外键到一行

android - 如何按字符串删除 sqlite 表行条目?

python - 使用 NumPy 的向量化的文档字符串不匹配

未捕获python3 gspread异常

python - cx_Freeze 构建错误?

python - 通过 python 子进程启动 linux 命令不能按预期工作

python - 从 python sqlite 异常获取更多信息

c# - 通过 DbLinq 使用 Linq to SQLite 创建记录