区分大小写的查询返回字符串而不是列表

时间:2013-09-20 16:05:26

标签: python sql postgresql case-sensitive identifier

我在使用python的pgdb使用多个区分大小写的列执行查询时遇到问题。大多数查询的结果都返回一个python列表,但如果我针对指定多个区分大小写的列的表发出查询,则结果为string

例如,我在PostgreSQL数据库中有一个表,其中包含3个case-sensitve boolean列:

(colA, colB, debug)

如果我有兴趣选择多个列,我会从查询中收到原始string结果:

query = 'SELECT ("colA", debug) FROM my_table;"

query = 'SELECT ("colA", "colB") FROM my_table;"

查询将返回:

cursor.execute(query)
cursor.fetchone()
['(f,f)']

发出以下查询:

query = "SELECT * FROM my_table;"
cursor.execute(query)
cursor.fetchone()

产生预期的python列表:

[False, False, False]

如果我在引号中指定一列,则结果是预期的:

query = 'SELECT ("colA") FROM my_table;'
cursor.execute(query)
cursor.fetchone()
[False]

我希望有人可以指出我正确的方向,以便在选择多个case-sensitve列时理解为什么我会收到原始string。我可以发出多个查询来解决我的问题,或只是SELECT *但是为了保持健壮的代码并保护自己免受将来对表的更改,我更愿意指定我的列。

1 个答案:

答案 0 :(得分:1)

如果在括号中包含多个coumns,则会形成ad-hoc行类型,从而返回单个值。

SELECT ("colA", "colB") FROM my_table;

删除parens以获取单个列:

SELECT "colA", "colB" FROM my_table;

如果对双引号有疑问,请阅读chapter about identifiers in the manual。我的常设建议是仅在PostgreSQL中使用合法的小写标识符。