【发布时间】:2016-08-11 04:12:22
【问题描述】:
我构建了一个 sql 子句,在其中引用了与 a 和 b 相同的表,以将两个几何图形作为 postgis 命令进行比较。
我想使用 %s 运算符将值传递到 sql 语句中,并使用 to_sql, params kwargs 将结果读入 pandas 数据帧。目前我的代码将允许将一个值传递给一个%s,但我正在寻找同一值列表的多个插入。
我正在使用 psycopg2 连接到 postgresql 数据库。
下面是简化代码
sql = """
SELECT
st_distance(a.the_geom, b.the_geom, true) AS dist
FROM
(SELECT
table.*
FROM table
WHERE id in %s) AS a,
(SELECT
table.*
FROM table
WHERE id in %s) AS b
WHERE a.nid <> b.nid """
sampList = (14070,11184)
df = pd.read_sql(sql, con=conn, params = [sampList])
基本上,我希望在两个地方都用 sampList 值替换 %s。编写的代码将仅替换指示': list index out of range 的第一个值。如果我调整为拥有一个 %s 并用数字替换第二个 in 语句,代码运行,但最终我想重复这些值。
【问题讨论】:
-
你必须传入参数占位符列表。
-
您希望两个
%s参数引用相同的值列表吗? -
@wildplasser,是的,这两个
%s参数指的是同一个列表 -
您不需要子查询,只需一个普通(反)连接即可。顺便说一句:您的问题是将列表传递给准备好的语句。使用两次只是一个细节。
标签: python sql postgresql pandas sqlalchemy