sqlalchemy过滤器中的安全参数绑定

时间:2015-06-02 12:55:36

标签: python sql sqlalchemy

我需要将部分原始sql查询传递给sqlalchemy过滤器,如

s.query(account).filter("coordinate <@> point(%s,%s) < %s"%(lat,long,distance))

是的,我试图在postgresql中使用earthdistance函数。

当然,我可以使用PostGis和GeoAlchemy2,但我想知道这类问题的一般解决方案。

我知道sqlalchemy可以安全地传递原始sql查询。

result = db.engine.execute("select * coordinate <@> point(:lat,:long) < :distance",**params)

是否有任何类似的函数可用于绑定部分(?)sql查询的参数?我想有人实现像func.ll_to_earth这样的自定义sql函数已经使用了这个函数。

1 个答案:

答案 0 :(得分:2)

查询时有.params()。试试这个:

query = s.query(account).filter(
    "coordinate <@> point(:lat, :long_) < :dist").params(
        lat=lat, long_=long_, dist=distance)

并且there is the documentation就可以了。

注意:我重命名了你的long param,因为在python中有一个名为__builtin__(long int)的long,为了显而易见的原因,最好不要覆盖已经使用过的单词。