首页 > 解决方案 > PYTHON - 使用自定义 MariaDB 连接器动态更新多个列

问题描述

在阅读这个问题时:SQL Multiple Updates vs Single Update performance

我想知道如何使用MariaDB 之类的连接器同时动态实现多个变量的更新。阅读官方文档我没有发现任何类似的东西。

This question is similar,它帮助我了解如何使用自定义连接器的参数化查询,但它没有回答我的问题。

让我们假设,从项目的一个视图中,我们收到一本字典。

该字典具有以下结构(简化示例):

{'form-0-input_file_name': 'nofilename', 'form-0-id': 'K0944', 'form-0-gene': 'GJXX', 'form-0-mutation': 'NM_0040(p.Y136*)', 'form-0-trix': 'ZSSS4'}

假设字典中的每个键对应于数据库表中的一列,如果我没记错的话,我们将不得不遍历字典并在每次迭代中构建查询。

像这样的东西(半伪代码,可能不正确):

query = "UPDATE `db-dummy`.info "
for key in a_dict:
    query += "SET key = a_dict[key]"

我不清楚如何在循环中构造所述查询。

实现这一目标的最蟒蛇方式是什么?

标签: pythonsqlmariadb

解决方案


虽然这可以工作。


query = "UPDATE `db-dummy`.info "
for index, key in enumerate(a_dict):
    query = query + ("," if index != 0 else "") +" SET {0} = '{1}'".format(key,a_dict[key])

您应该考虑为安全和安保考虑参数化查询。此外,动态字典也可能引发其他问题,最好在尝试此类操作之前验证或过滤一组约定的密钥。


query = "UPDATE `db-dummy`.info "
for index, key in enumerate(a_dict):
    query = query + ("," if index != 0 else "") +" SET {0} = ? ".format(key)

# Then execute with your connection/cursor

cursor.execute(query, tuple(a_dict.values()) )

推荐阅读