0

我通过 psycopg2 运行以下语句(有效):

self.cursor.execute( """INSERT INTO """ + self.config.schema + """.parcel (
    id,geometry) VALUES (%s, ST_GeomFromGML(%s))""", (self.id, self.geometry)

但现在我需要介绍一些动态,并想尝试这样的事情:

if multi:
    mygeom = "ST_Multi(ST_GeomFromGml(" + self.geometry + "))"
else 
    mygeom = "ST_GeomFromGml(" + self.geometry + ")"

self.cursor.execute( """INSERT INTO """ + self.config.schema + """.parcel (
    id,geometry) VALUES (%s, %s)""", (self.id, mygeom)

当然,这会失败很长时间,因为它将整个函数解析为转义字符串。有没有人对如何解析数据库函数以在执行语句中动态解析它们有任何经验,或者这是不可能的?

4

2 回答 2

0

self.cursor.execute("INSERT INTO {}.parcel (id,geometry) VALUES (%s, %s)".format(self.config.schema), (self.id, mygeom))

于 2012-07-11T21:09:37.567 回答
0
if multi:
    mygeom = "ST_Multi(ST_GeomFromGml(%s))"
else:
    mygeom = "ST_GeomFromGml(%s)"

self.cursor.execute( """INSERT INTO {}.parcel (
    id,geometry) VALUES (%s, {})""" .format(self.config.schema, mygeom) , (self.id, self.geometry) )

我用字符串format方法插入了模式和函数。我也self.geometry以安全的方式插入。

于 2012-07-11T19:56:10.903 回答