我正在使用postgres和一个psycopg2 python/flask web应用程序。
我有一个编码问题,我确信这是我遗漏的一些愚蠢的东西(我是编程新手)。下面的语句可以完美地工作:
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',’什么是最好的...‘是“col”的开头。)
我做了‘打印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)。
我遗漏了什么?!
发布于 2012-12-31 16:51:21
我最终使用了this post中描述的AsIs psycopg2扩展。像护身符一样工作!
发布于 2012-12-31 16:13:37
表名和列名不是文本类型,它们是标识符(type = name)。它们不接受转义的字符串字面量,因此您的占位符可能需要%s以外的其他值。
http://www.postgresql.org/docs/9.2/static/datatype-character.html
https://stackoverflow.com/questions/14099092
复制相似问题