0

psycopg2 python/flask Web アプリで postgres を使用しています。

私はエンコーディングの問題を抱えていますが、それは私が見逃している愚かなものであると確信しています (私はプログラミングが初めてです)。次のステートメントは完全に機能します。

cur.execute("SELECT column_name FROM information_schema.columns where table_name = %s;", (tablename,))

fetchall() を使用して、テーブル内の列名のリストを作成します。ただし、別のステートメントは機能しません。

cur.execute("ALTER TABLE %s ADD COLUMN %s varchar;", (tablename, col,))

エラーは次のとおりです。

psycopg2.ProgrammingError
ProgrammingError: syntax error at or near "E'flatresponses_1'"
LINE 1: ALTER TABLE E'flatresponses_1' ADD COLUMN E'What was the bes...

('flatresponses_1' は 'tablename' で、'What was the best...' は 'col' の始まりです。)

「print cur.query」を実行した結果は次のとおりです。

>>> print cur.query
>>> ALTER TABLE E'flatresponses_1' ADD COLUMN E'What was the best part of your ENT clinic visit today? Why?' varchar;

2 番目のクエリで E' エンコーディングを取得していますが、最初のクエリでは取得していません。str(tablename) も試しました。

何が足りないの?!

4

2 に答える 2

2

この投稿で説明されているように、私はAsIspsycopg2拡張機能を使用することになりました。チャームのように働いた!

于 2012-12-31T08:51:21.077 に答える
0

テーブルと列の名前はテキスト型ではなく、識別子 (型 = 名前) です。それらはエスケープされた文字列リテラルを取りません。おそらく、プレースホルダーに %s 以外の何かが必要です。

http://www.postgresql.org/docs/9.2/static/datatype-character.html

于 2012-12-31T08:13:36.587 に答える