我想执行一些原始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...
问题是userid
中的some_table
属于varchar
类型。我想要做的就是告诉SQLAlchemy在执行语句之前将12345
转换为字符串。我知道如何在Python和SQL中进行转换。但我记得我曾经在SQLAlchemy中使用过显式类型定义,我再也找不到它了。有人能指出我正确的方向吗?
(我的实际问题涉及BIGINTs与INTs的postgresql数组,但我试图保持简单。)
感谢您的帮助!
答案 0 :(得分:2)
这个问题已经有点老了,但是了解自己,我将来可能会回来。 这是我正在寻找的一些代码:
{{1}}
答案 1 :(得分:0)
从我看到的,有两种" duh"如果我没有遗漏任何东西,那么就可以做到这一点 -
第一路
userid=12345 # defining here
sql = text("SELECT * FROM some_table WHERE userid = '"+userid+"'")
res = engine.execute(sql)
第二路
sql = text("SELECT * FROM some_table WHERE userid = :userid")
res = engine.execute(sql, userid=str(12345))