【发布时间】:2021-01-31 14:14:20
【问题描述】:
我继承了一些使用 SQLAlchemy 写入 Postgres 数据库的 Python 代码
代码的重要部分是:
from sqlalchemy import *
connection_string = "postgres://user,pasword,server&port/db"
然后有一个通用函数可以做到这一点:
db = create_engine(connection_string)
cmd = "INSERT INTO TABLE_NAME (a_id,b_id,c) values (" + str(a_id) + ", " + str(b_is) + ", '" + (c_field_value) + "');"
result = db.execute(cmd)
可能不是最好的,但它可以工作,除非 c_field_value 包含 % 字符
我发现了这一点,因为 INSERT 在没有 % 的情况下完美运行,但是当你有 % 时它会崩溃
我也在函数调用之前添加了这个
c_field_value = re.sub('\%', ' PCT', c_field_value)
并且 INSERT 工作正常,如果我将记录手动 (CLI) 插入 Postgres 也可以。
所以如果没有大规模的重构,我该如何让现有代码正确插入 % 呢?
【问题讨论】:
-
请阅读SQL注入:en.m.wikipedia.org/wiki/SQL_injection.
-
关于如何安全地传递参数,请查看stackoverflow.com/questions/19314342/…
标签: python-3.x sqlalchemy