我想在SQLAlchemy中使用GeoPandas from_postgis功能时将参数传递给sql查询。
classmethod GeoDataFrame.from_postgis(sql,con,geom_col =' geom',crs = None,index_col = None,coerce_float = True,params = None)
我查看了之前的类似question和also here,建议使用SQLAlchemy的textual SQL选项。但是,这需要访问conocute,这不包含在GeoDataFrame from_postgis选项中。
您能否建议将参数传递给SQL的最佳方法?如果没有直接在from_postgis中,那么如何最好地单独构造完整的SQL字符串并将其作为第一个sql参数传递给from_postgis。
答案 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)
一个限制是您必须立即传递所有参数,否则如果要设置多个参数,您将从格式中获得关键错误。