python - Select into subdict 从多个表

标签 python sql python-3.x postgresql psycopg2

我有一个这样的数据库结构:

CREATE TABLE person (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    age INTEGER NOT NULL,
    hometown_id INTEGER REFERENCES town(id)
);

CREATE TABLE town (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    population INTEGER NOT NULL
);

我想在选择时得到如下结果:

{
    "name": "<person.name>",
    "age": "<person.age>"
    "hometown": {
        "name": "<tometown.name>",
        "population": "<tometown.population>"
    }
}

我已经在使用 psycopg2.extras.DictCursor ,所以我认为我需要使用 SQL 的 SELECT AS

这是我尝试过但没有结果的一个例子,我做了很多类似的小调整,所有这些都引发了不同的错误:

SELECT
    person(name, age),
    town(name, population) as town,
FROM person
JOIN town ON town.id = person.hometown_id

有什么方法可以做到这一点,还是我应该单独选择所有列并在 Python 内部构建字典?

Postgres 版本信息:

psql (9.4.6, server 9.5.2)
WARNING: psql major version 9.4, server major version 9.5.
         Some psql features might not work.

最佳答案

像什么?

t=# with t as (
select to_json(town),* from town
)
select json_build_object('name',p.name,'age',age,'hometown',to_json) "NameItAsYou Wish"
from person p
join t on t.id=p.hometown_id
;
                                NameItAsYou Wish
--------------------------------------------------------------------------------
 {"name" : "a", "age" : 23, "hometown" : {"id":1,"name":"tn","population":100}}
(1 row)

关于python - Select into subdict 从多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42504724/

相关文章:

python - “模块”对象没有属性 'pcapObject'

sql - 如何在返回 View 行类型集的 pl/pgsql 函数中组合特定行?

php - 关于 PHP 的初学者问题,除了 for/foreach/while 循环之外,还有其他方法可以显示来自 mySQL 的数据吗?

python - 划分后应用floor division和int()有什么区别吗?

python - While 循环仅正确迭代一次

python - 为什么在 RTX 3070/cudnn8/CUDA11.1 上运行时添加卷积/池层会使 Keras/Tensorflow 模型崩溃?

连接到使用 Nodejs 创建的 socket.io 服务器的 Python 脚本

python - 如何使用 Superfeedr 订阅实时 XMPP RSS 提要

MySql 在存储过程中的 IF THEN END IF 中使用 OR

mysql - 如果文本文件的一列中有多个项目,那么如何使用 python 将其导入到 SQL 中?