asP*_*dge 3 python postgresql sqlalchemy
我想执行一些原始 SQL 并利用 SQLAlchemy 的 SQL 注入预防功能。
我的代码与此类似:
import sqlalchemy
from sqlalchemy.sql import text
DB_URI = '...'
engine = sqlalchemy.create_engine(DB_URI)
sql = text("SELECT * FROM some_table WHERE userid = :userid")
res = engine.execute(sql, userid=12345)
# do something with the result...
Run Code Online (Sandbox Code Playgroud)
问题是useridinsome_table的类型是varchar。我想做的就是告诉 SQLAlchemy12345在执行语句之前转换为字符串。我知道如何在 Python 和 SQL 中进行转换。但我记得我曾经在 SQLAlchemy 中使用过显式类型定义,但我现在找不到它了。有人能指出我正确的方向吗?(我的实际问题涉及 postgresql BIGINT 与 INT 数组,但我试图保持简单。)
谢谢你的帮助!
这个问题已经有点老了,但了解我自己,我将来可能会回来回答这个问题。这是我正在寻找的代码:
import sqlalchemy
from sqlalchemy.sql.expression import bindparam
from sqlalchemy.types import String
from sqlalchemy.dialects.postgresql import ARRAY
DB_URI = '...'
engine = sqlalchemy.create_engine(DB_URI)
sql = text("SELECT * FROM some_table WHERE userid = :userid").bindparams(bindparam("userid", String))
res = engine.execute(sql, userid=12345)
# in particular this bit is useful when you have a list of ids
sql = text("SELECT * FROM some_table WHERE userids = :userids").bindparams(bindparam("userids", ARRAY(String)))
res = engine.execute(sql, userids=[12345, 12346, 12347])
Run Code Online (Sandbox Code Playgroud)