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
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 に答える
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 に答える