SQLAlchemy使用GeoPandas.from_postgis传递参数

时间:2017-07-18 17:32:10

标签: python pandas sqlalchemy postgis geopandas

我想在SQLAlchemy中使用GeoPandas from_postgis功能时将参数传递给sql查询。

  

classmethod GeoDataFrame.from_postgis(sql,con,geom_col =' geom',crs = None,index_col = None,coerce_float = True,params = None)

我查看了之前的类似questionalso here,建议使用SQLAlchemy的textual SQL选项。但是,这需要访问conocute,这不包含在GeoDataFrame from_postgis选项中。

您能否建议将参数传递给SQL的最佳方法?如果没有直接在from_postgis中,那么如何最好地单独构造完整的SQL字符串并将其作为第一个sql参数传递给from_postgis。

2 个答案:

答案 0 :(得分:2)

对于文本SQL,您可以使用.bindparams添加参数:

query = text("select * from foo where bar = :a").bindparams(a=1)

对于在SQLAlchemy中构造的查询,将自动包含绑定参数:

foo = Table(...)  # you need to define foo
query = select(["*"]).select_from(foo).where(foo.c.bar == 1)

您还可以通过params from_postgis参数直接传递参数,如果这更自然:

df.from_postgis(text("select * from foo where bar = :a"), params={"a": 1})

不要使用str.format作为另一个答案,因为它容易受到SQL注入。

答案 1 :(得分:0)

来自链接的类似问题:

sql= "select geom, x,y,z from your_table"

我通常只使用字符串格式传递参数:

sql_base = "select geom, x,y,z from your_table where x > {x}"
sql = sql_base.format(x=some_x_value)

一个限制是您必须立即传递所有参数,否则如果要设置多个参数,您将从格式中获得关键错误。