我通过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语句中动态解析它们的经验,或者这是不可能的?
答案 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))