python - Pandas 中的 SQL 注入(inject);绑定(bind)列表到 SQLAlchemy 中的参数

标签 python pandas sqlalchemy

我有这个 SQL 查询:

sql = "select * from table where date in {dl}"

其中 dl 是一个日期元组。我可以通过执行 string.format(dl=...) 然后在 pandas 中使用 read_sql_query 来进行查询,但我读到这可能导致 SQL 注入(inject),所以是不安全。

但是,在 SQLAlchemy 中似乎没有好的选择。您似乎无法使用 text() 将列表传递给参数,并且首先将列表转换为字符串会导致错误。我看到您可以遍历列表并一一传递参数,但为什么有人要这样做?

清理变量(删除引号、分号等)是否有助于降低 SQL 注入(inject)的风险?无法使用原始 SQL 字符串听起来很糟糕。

最佳答案

您可以使用 .bindparams()将参数绑定(bind)到 text() 构造中的值:

sql = text("select * from table where date in :dl").bindparams(dl=...)

请注意,您传递给 dl 的值必须是元组才能正确呈现。

关于python - Pandas 中的 SQL 注入(inject);绑定(bind)列表到 SQLAlchemy 中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26184248/

相关文章:

python - 填充 Float Column 的 np.nan 条目会给出 ValueError : fill value must be in categories

python - 如何创建默认等于主键的 sqlalchemy 列?

python - SQLAlchemy 从两个子查询的连接中选择

Python - 使用 Pandas 和 openpyxl 修改现有的 excel

python - pandas 乘法中的 Groupby

python - 如何重用相同的测试来测试不同的实现?

python - 设置两个数组之间的时间步延迟

python - SQLAlchemy 获取最大值

python - Google 应用程序引擎,python : Google, Facebook,Twitter,OpenID 帐户

python - 如何使用 django 在网络浏览器上推送通知