令人困惑的编码与python,Flask,psycopg2的不一致

时间:2012-12-31 08:03:18

标签: python postgresql encoding flask psycopg2

我正在使用带有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)。

我缺少什么?!

2 个答案:

答案 0 :(得分:2)

我最终使用了this post中描述的AsIs psycopg2扩展。工作就像一个魅力!

答案 1 :(得分:0)

表名和列名不是文本类型,它们是标识符(type = name)。他们不会使用转义字符串文字,并且可能你的占位符需要%s以外的东西。

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