Django中如何传递含双引号、单引号的变量至SQL查询字符串?
在Django中处理含特殊引号的SQL传参问题
核心原则:别手动拼接SQL字符串
你遇到的引号冲突只是表面问题,手动拼接SQL最大的风险是SQL注入——这是严重的安全漏洞。Django提供了安全的参数化方式,既能解决引号问题,又能彻底规避注入风险:
1. 用Django ORM(最省心的方案)
假设你的数据库表对应Django模型是Table1(注意模型名不能有空格,数据库表名如果是table 1建议改成table_1,符合命名规范),直接用ORM的create方法,它会自动处理所有特殊字符:
from your_app.models import Table1 variable1 = input() # 直接创建对象,ORM自动转义所有特殊符号 Table1.objects.create(content=variable1)
2. 用参数化原生SQL
如果必须写原生SQL,用Django的数据库游标时传入参数列表,绝对不要自己拼字符串:
from django.db import connection variable1 = input() with connection.cursor() as cursor: # %s是参数占位符,Django会自动适配数据库类型并完成转义 cursor.execute("INSERT INTO table_1 (content) VALUES (%s)", [variable1])
注:不同数据库的占位符写法可能有差异,但Django的cursor.execute会自动处理适配,统一用%s即可兼容大部分场景。
特殊需求:直接忽略变量中的引号
如果业务要求必须去掉输入里的单双引号,可以先做字符串清洗,再用上面的安全方式传参:
variable1 = input() # 移除所有单引号和双引号 cleaned_content = variable1.replace("'", "").replace('"', '') # 用ORM或参数化SQL存入数据库 Table1.objects.create(content=cleaned_content)
内容的提问来源于stack exchange,提问作者Akhand Chaurasia
相关产品推荐
相关产品推荐

