Django将多个参数传递到%s格式的原始查询中

2024-05-29 05:09:51 发布

您现在位置:Python中文网/ 问答频道 /正文

在使用MariaDB的自定义连接器之前,我正在进行的项目中,但现在我必须在Django中使用MySQL的默认连接器

以前的MariDb连接器使用?进行参数化,但Django的MySQL使用%s

有了MariaDB,你可以这样做:

sd_query = create_update_query(interpretation, record_id, tableName)
cursor.execute(sd_query, tuple(interpretation.values()) )

如何使用%s参数化实现它

我在官方文件中找不到任何东西


Tags: 项目djangoid参数createmysqlupdatesd
3条回答

对于这个任务来说,普通的python字符串格式是不够的,有人可以尝试进行查询注入,我的意思是,可能性仍然存在(即使您保护了查询sintax)。Django已经为您解决了这个问题,所以您不必考虑太多,请查看Django文档的这一部分

如果您问的是如何准备SQL,那么这是一个特定于Python的问题,而不是Django。 你可以这样做-

update_query = "UPDATE `db-dummy`.s_data SET s_id = {}, h_loss = {} WHERE record_id = {}"    
update_query = update_query.format(s_id_value, h_loss_value, 5877)

现在,如果您想在Django中执行它,您需要从连接导入游标

from django.db import connection
cursor = connection.cursor()

然后以以下方式执行:

cursor.execute(update_query)

如果SQL语句返回某些内容,则可以使用

records = cursor.fetchall()

然后您将能够循环使用'records'变量

你似乎对我在你的之前的question中给你的解决方案感到困惑,在那里我使用了'{}%'.format(some_value),因为你有一个值,想用它做一个类似的查询(<SOME_VALUE>%),所以我执行了字符串格式化,以使字符串具有正确的所需形式。这里不需要这样做,只需传递元组即可,因此这里的操作与使用MariaDB光标时的操作相同,唯一的区别是在占位符中使用%s而不是?

sd_query = create_update_query(interpretation, record_id, tableName)
sd_data = tuple(interpretation.values())
cursor.execute(sd_query, sd_data)

相关问题 更多 >

    热门问题