Django DB 连接自定义 SQL 参数
Django DB connection custom SQL parameters
我需要执行批量更新,因为 ORM bulk_update 对于 1000 条记录来说似乎有点慢。由于我正在更新可能包含单引号的字符串,例如Mc'Donald,我不能简单地用所有属性模板化一个字符串变量。
documentation推荐如下:
cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz])
问题:如何将其正确应用于以下用例?
技术细节:
- Django 3.0.2
- PostgreSQL
我正在生成一个 SQL 字符串,然后按如下方式调用它:
from django.db import connection
people = [{"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
对于 Python 中的 SQL 查询,始终使用 %s
作为占位符,即使是整数。
sql += 'UPDATE people SET name = %s, age = %s, height_m = %s WHERE id = %s;'
请注意,对于多个语句,答案可能取决于您使用的数据库(例如 用于 MySQL)。
我需要执行批量更新,因为 ORM bulk_update 对于 1000 条记录来说似乎有点慢。由于我正在更新可能包含单引号的字符串,例如Mc'Donald,我不能简单地用所有属性模板化一个字符串变量。
documentation推荐如下:
cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz])
问题:如何将其正确应用于以下用例?
技术细节:
- Django 3.0.2
- PostgreSQL
我正在生成一个 SQL 字符串,然后按如下方式调用它:
from django.db import connection
people = [{"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
对于 Python 中的 SQL 查询,始终使用 %s
作为占位符,即使是整数。
sql += 'UPDATE people SET name = %s, age = %s, height_m = %s WHERE id = %s;'
请注意,对于多个语句,答案可能取决于您使用的数据库(例如