python - 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]"
我不清楚如何在循环中构造所述查询。
实现这一目标的最蟒蛇方式是什么?
解决方案
虽然这可以工作。
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()) )
推荐阅读
- python - 基于面部识别更新标签
- java - BeanNameAware 的用例
- python - Matplotlib 动画没有显示任何情节
- c - How to convert a character array to a decimal integer array?
- php - Laravel 5.3 从数据库结果创建多维数组
- multithreading - 多线程等待一个线程使用哪种同步模型
- python - 在文件中搜索单词并取整行
- powershell - 在 GWMI 过滤器中输出 PSComputerName
- c# - 如何从一维 int 数组返回数字网格?
- python - 如何使用 statsmodels 和 sklearn 在回归中添加控制变量?