Python 从SQLAlchemy orm生成完整查询

Python 从SQLAlchemy orm生成完整查询,python,sql,sqlalchemy,Python,Sql,Sqlalchemy,最后,我尝试使用pandas read_sql,它接受原始sql查询 我试着改变一些东西,比如 sql = str(session.query(Post).filter(Post.user_id=1)) 这就产生了类似于 select * from Post where user_id = %(user_id_1) 是否有任何方法可以使用已插入的参数生成该查询?正如您所发现的,如果我们str()一个ORM查询,我们将使用方言的paramstyle获得带有参数占位符的SQL命令文本: qry=

最后,我尝试使用pandas read_sql,它接受原始sql查询

我试着改变一些东西,比如

sql = str(session.query(Post).filter(Post.user_id=1))
这就产生了类似于

select * from Post where user_id = %(user_id_1)

是否有任何方法可以使用已插入的参数生成该查询?

正如您所发现的,如果我们
str()
一个ORM查询,我们将使用方言的paramstyle获得带有参数占位符的SQL命令文本:

qry=session.query(Parent.filter)(Parent.id==1)
sql=str(qry)
打印(sql)
“”“控制台输出:
选择parent.id作为parent\u id,parent.lastname作为parent\u lastname,parent.firstname作为parent\u firstname
来自父母
其中parent.id=%(id_1)s
"""
如果我们想在SQL语句中嵌入参数值,那么我们需要
.compile()
它:

sql\u literal=qry.statement.compile(
compile_kwargs={“literal_binds”:True},
)
打印(sql_文本)
“”“控制台输出:
选择parent.id、parent.lastname、parent.firstname
来自父母
其中parent.id=1
"""

(关于SQL注入的标准免责声明适用。)

您可以尝试将该SQL字符串直接传递到
read\u SQL\u query
以及
params={“user\u id\u 1”:1}
。这将帮助您避免在SQL命令文本中注入文字值的混乱。是的,这就是我现在要做的。似乎应该有一种方法可以通过SQLAlchemy自动做到这一点