为了账号安全,请及时绑定邮箱和手机立即绑定

Django DB连接自定义SQL参数

Django DB连接自定义SQL参数

莫回无 2023-10-18 20:51:58
我需要执行批量更新,因为 ORMbulk_update对于1000 条记录来说似乎有点慢。由于我正在更新可能包含单引号的字符串(例如Mc'Donald ),因此我不能简单地模板化具有所有属性的字符串变量。该文档建议如下:cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz])问题:如何正确地将其应用于以下用例?技术细节:姜戈3.0.2PostgreSQL我正在生成一个 SQL 字符串,然后按如下方式调用它:from django.db import connectionpeople = [{"name": "Person A", "age": 15, "height_m": 1.83, "id": 5}, {"name": "Person B", "age": 19, "height_m": 1.73, "id": 45}]sql = ""params = []for p in people:  sql += 'UPDATE people SET name = %s, age = %d, height_m = %d WHERE id = %d;'  params.append(p['name'])  params.append(p['age'])  params.append(p['height_m'])  params.append(p['id'])with connection.cursor() as cursor:  cursor.execute(sql, params)  cursor.connection.commit() 这会引发以下错误:ValueError: unsupported format character 'd' (0x64) at index 104
查看完整描述

1 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超6个赞

对于 Python 中的 SQL 查询,请始终用作%s占位符,即使对于整数也是如此。

sql += 'UPDATE people SET name = %s, age = %s, height_m = %s WHERE id = %s;'

请注意,对于多个语句,答案可能取决于您使用的数据库。



查看完整回答
反对 回复 2023-10-18
  • 1 回答
  • 0 关注
  • 46 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信