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;

我在第二个查询中得到 E' 编码,但不是第一个。我也试过 str(tablename)。

我错过了什么?!

4

2 回答 2

2

如本文所述,我最终使用了 AsIs psycopg2 扩展。像魅力一样工作!

于 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 回答