mysql 从字典创建SQL查询

np8igboo  于 2023-08-02  发布在  Mysql
关注(0)|答案(3)|浏览(100)

我有一个更新数据库(MySQL)中条目的函数,它需要尽可能动态。
该函数允许API的用户传递记录的id,然后通过kwargs来处理要更改的值(对可以传递多少值没有限制)。
所以假设我从kwargs那里得到了这本字典

{'hello':'world', 'foo':'bar'}

字符串
有没有一种方法可以在更新语句中使用它。

UPDATE myTable
SET key_n = val_n, key_n+1 = val_n+1, ...
WHERE id = the_id_passed_to_the_function


先谢谢你。

hmtdttj4

hmtdttj41#

试试这个:

def UpdateQuery(data,where):
    if isinstance(data, dict) and where:
        vals = ','.join(["%s=?" %(k) for k,v in data.iteritems()])
        query = "update myTable set %s where id=?" % (vals)
        res = cr.execute(query,where)

字符串

kd3sttzy

kd3sttzy2#

怎么样:

foo = kwargs['bar']
id = 1
if foo:
    k = foo.keys()
    q = '''UPDATE myTable'''
    q += ','.join('SET {0}=%s'.format(i) for i in k)
    q += 'WHERE id = %s'
    cur.execute(q,tuple(foo[i] for i in k)+(id,))

字符串
需要注意的几点:
1.因为字典是无序的,所以我们首先获取键的列表。
1.而不是将值直接放入查询中;你应该把它们传进来。同样,我们将遍历同一个键列表,以使值与列名匹配。
1.最后,我们将id添加到查询的有序参数集中。

yjghlzjz

yjghlzjz3#

这适用于Python 3

def sql_update_from_dictionary(self, update_table, update_dict, update_id):
    """
    UPDATE query from dictionary
    Args:
        update_table (str): Name of the table
        update_dict (dict): Data to be updated
        update_id    (str): id of the item that will be updated
    """
    sql = "UPDATE "+update_table+" SET {} WHERE id=".format(', '.join('{}=%s'.format(k) for k in update_dict))+str(update_id)
    db.execute(sql, list(update_dict.values()))
    connection.commit()

字符串

相关问题