2012-07-11 98 views
0

我貫穿psycopg2(工作)以下語句:傳遞動態數據庫功能psycopg2 cursor.execute(聲明,則params)

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) 

當然這會失敗的大時間,因爲它會將整個函數解析爲轉義字符串。有沒有人有過如何解決數據庫函數在執行語句中動態解析它們的經驗,或者這是不可能的?

回答

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

0

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