我正在使用带有psycopg2 python / flask网络应用程序的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','什么是最好的......'是'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)。
我缺少什么?!
答案 0 :(得分:2)
我最终使用了this post中描述的AsIs psycopg2扩展。工作就像一个魅力!
答案 1 :(得分:0)
表名和列名不是文本类型,它们是标识符(type = name)。他们不会使用转义字符串文字,并且可能你的占位符需要%s以外的东西。
http://www.postgresql.org/docs/9.2/static/datatype-character.html