我有这个 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/