【发布时间】:2017-02-28 09:22:43
【问题描述】:
我有一个这样的数据库结构:
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.
【问题讨论】:
-
postgres 版本?..
-
@VaoTsun 抱歉,已更新。服务器
9.5.2,我想这是 Python 唯一关心的事情 -
我熟悉的 SQL 语法是“SELECT a.name, a.age, b.name, b.population from person a, town b where a.hometown_id = b.id” .此处显示了类似的 postgres 示例:postgresql.org/docs/8.3/static/tutorial-join.html
-
@TomBarron 是的,但这不会将它们输出为嵌套字典
-
@MarkusMeskanen 据我所知,SQL 对 python 字典一无所知
标签: python sql python-3.x postgresql psycopg2