当我使用函数而不是带有键 func_name_1 的嵌套对象时,SQLAlchemy 如何 select 平面数组
SQLAlchemy how to select flat array when I use function instead of nested object with key func_name_1
我有一些 category
table,我正在尝试获得类似这样的平面阵列
select([psql.array_agg(category.c.name)])
预期结果:
["foo", "bar", "etc"]
实际结果:
[
{
"array_agg_1": ["foo", "bar", "etc"]
}
]
我尝试过很多不同的选择。但它们更像是解决方法。最有趣的是,在 postgres 控制台中一切看起来都很好。
select array_agg(name) from category
{foo,bar,etc}
为什么会发生这种情况,如何在不进行额外的子选择、按键获取项目等的情况下解决这个问题?
除非您 运行 psql
启用了 tuples_only
设置,否则查询的输出是
array_agg
═══════════════
{foo,bar,etc}
(1 row)
从这里我们可以看出,在没有显式标签的情况下,Postgresql 为输出列分配了 array_agg
标签。
SQLAlchemy 行对象“知道”它们包含的列名,因此如果您将它们转换为映射,例如:
>>> with engine.connect() as conn:
... result = conn.execute(sa.select(array_agg(category.c.name)))
... print(list(result.mappings()))
你得到
[{'array_agg_1': ['foo', 'bar', 'etc']}]
但是,如果我直接将结果转换为列表,同时调用结果的 scalar_one() 方法来指示我期望单行,我会得到所需的输出:
>>> with engine.connect() as conn:
... result = conn.execute(sa.select(array_agg(category.c.name)))
... print(list(result.scalar_one()))
...
['foo', 'bar', 'etc']
>>>
我有一些 category
table,我正在尝试获得类似这样的平面阵列
select([psql.array_agg(category.c.name)])
预期结果:
["foo", "bar", "etc"]
实际结果:
[
{
"array_agg_1": ["foo", "bar", "etc"]
}
]
我尝试过很多不同的选择。但它们更像是解决方法。最有趣的是,在 postgres 控制台中一切看起来都很好。
select array_agg(name) from category
{foo,bar,etc}
为什么会发生这种情况,如何在不进行额外的子选择、按键获取项目等的情况下解决这个问题?
除非您 运行 psql
启用了 tuples_only
设置,否则查询的输出是
array_agg
═══════════════
{foo,bar,etc}
(1 row)
从这里我们可以看出,在没有显式标签的情况下,Postgresql 为输出列分配了 array_agg
标签。
SQLAlchemy 行对象“知道”它们包含的列名,因此如果您将它们转换为映射,例如:
>>> with engine.connect() as conn:
... result = conn.execute(sa.select(array_agg(category.c.name)))
... print(list(result.mappings()))
你得到
[{'array_agg_1': ['foo', 'bar', 'etc']}]
但是,如果我直接将结果转换为列表,同时调用结果的 scalar_one() 方法来指示我期望单行,我会得到所需的输出:
>>> with engine.connect() as conn:
... result = conn.execute(sa.select(array_agg(category.c.name)))
... print(list(result.scalar_one()))
...
['foo', 'bar', 'etc']
>>>