2

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

例如,我在 PostgreSQL 数据库中有一个表,其中包含 3 个区分大小写的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]

我希望有人能指出我正确的方向,以了解为什么我string在选择多个区分大小写的列时会收到原始数据。我可以发出多个查询来解决我的问题,或者只是SELECT *为了维护健壮的代码并保护自己免受未来对表的更改,我更愿意指定我的列。

4

1 回答 1

1

如果将多个列括在括号中,则会形成一个临时行类型,从而返回一个值。

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

删除括号以获取各个列:

SELECT "colA", "colB" FROM my_table;

如果对双引号有疑问,请阅读手册中关于标识符的章节。我的一贯建议是仅在 PostgreSQL 中使用合法的小写标识符。

于 2013-09-20T16:11:15.213 回答