SQL Запрос Python Переменные - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь сделать постгис-запрос, используя python переменные. Однако, когда я делаю следующий запрос:

sql = """SELECT * FROM "12NM(LineGridExp)" WHERE "12NM(LineGridExp)".geom && ST_MakeEnvelope(?, ?, ?, ?, 4326)""",str(x0), str(y0), str(x1), str(y1)

TerrLine = gpd.GeoDataFrame.from_postgis(sql, connection, geom_col='geom')

, я получаю следующее:

 Execution failed on sql '('SELECT * FROM "12NM(LineGridExp)" WHERE "12NM(LineGridExp)".geom && ST_MakeEnvelope(%s, %s, %s, %s, 4326)', -1.400993559416539)': argument 1 must be a string or unicode object: got tuple instead

Я, должно быть, упускаю что-то маленькое, но я не могу заставить его работать.

x0, y0, x1, y1 - все числа с плавающей точкой.

Любая помощь будет принята с благодарностью,

Том

1 Ответ

0 голосов
/ 07 января 2020

Вы не подставляете переменные в строку SQL, вы устанавливаете sql в кортеж, содержащий строку SQL, за которой следуют значения переменных.

Предполагается, что интерфейс PostGIS реализует стандартный cursor интерфейс, вы должны передать переменные в качестве аргумента кортежа для функции cursor.execute().

sql = """SELECT * FROM "12NM(LineGridExp)" WHERE "12NM(LineGridExp)".geom && ST_MakeEnvelope(?, ?, ?, ?, 4326)"""
cur.execute(sql, (x0, y0, x1, y1))
...