在SQLAlchemy原始SQL中设置输入参数类型

时间:2016-11-30 03:43:19

标签: 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... 

问题是userid中的some_table属于varchar类型。我想要做的就是告诉SQLAlchemy在执行语句之前将12345转换为字符串。我知道如何在Python和SQL中进行转换。但我记得我曾经在SQLAlchemy中使用过显式类型定义,我再也找不到它了。有人能指出我正确的方向吗? (我的实际问题涉及BIGINTs与INTs的postgresql数组,但我试图保持简单。)

感谢您的帮助!

2 个答案:

答案 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))