将动态数据库函数传递给psycopg2 cursor.execute(statement,params)

时间:2012-07-11 19:52:01

标签: python postgis psycopg2

我通过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)

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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