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

标签 python sql postgresql case-sensitive identifier

我在使用 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 * 但为了维护健壮的代码并保护自己免受 future 对表的更改,我更愿意指定我的列。

最佳答案

如果您将多个列括在括号中,您将形成一个特殊的行类型,从而导致返回单个值。

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

删除括号以获得单独的列:

SELECT "colA", "colB" FROM my_table;

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

关于python - 区分大小写的查询返回字符串而不是列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18921166/

相关文章:

sql - PostgreSQL 中不同值的 LIMIT

python - Gstreamer,如何从(rtmpsink)错误中恢复

sql - 在 Postgres 和 SQL Server 中为日期添加一天

python - Pandas - 比较 2 个数据帧以查找每天的第一个实例,其中值是第一个数据帧的倍数

sql - 跨过程共享临时表被认为是不好的形式吗?

java - postgresql 错误接近于 java

MYSQL - 有没有比使用包含 "OR"s 的大语句查询多个唯一值更好的方法

postgresql - 我有一篇由 bool 字段管理的文章 "state",但是当复选框被保存为已发布时,如何获取第一个日期(时间戳)?

python - 在 Windows 10 上的 Python 2.7 中创建 virtualenv,而其他 virtualenv 在 Python 3.8 中工作

python - 使用python 2.7将csv文件加载到mysql中