Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Postgres从同一模型中的不同组中获取不同的对象_Python_Postgresql_Pgadmin - Fatal编程技术网

Python Postgres从同一模型中的不同组中获取不同的对象

Python Postgres从同一模型中的不同组中获取不同的对象,python,postgresql,pgadmin,Python,Postgresql,Pgadmin,我目前很难弄清楚如何通过一个字段将此组中存在的不同对象传递给另一个通过相同字段但不同值的组。 我正在使用sqlalchemy将我的烧瓶连接到postgresql 我有这样的参考性模型: class ReferenceCity(Base): __tablename__ = 'reference_cities' id = Column(Integer, primary_key=True) site_id = Column(Integer, ForeignKey('sites.

我目前很难弄清楚如何通过一个字段将此组中存在的不同对象传递给另一个通过相同字段但不同值的组。 我正在使用sqlalchemy将我的烧瓶连接到postgresql 我有这样的参考性模型:

class ReferenceCity(Base):
    __tablename__ = 'reference_cities'
    id = Column(Integer, primary_key=True)
    site_id = Column(Integer, ForeignKey('sites.id'), nullable=False)
    name = Column(String)
基本上,参照性将按站点id分为2组。示例站点id=1和站点id=2

名称字段可以重复,例如:可以有两个带有
name
字段的ReferenceCity对象,两个都是纽约,但每个都有不同的
site\u id

SELECT count(*)
    FROM public.reference_cities
    WHERE site_id=1;
//got 711

SELECT count(*)
    FROM public.reference_cities
    WHERE site_id=2;
//got 709
我在pgadmin上执行count(*)命令来检查每组site_id的对象数量,从site_id=1得到711个对象,从site_id=2得到709个对象

所以必须有两个城市是另一组没有的,我正在尝试查找一个SELECT查询来查找缺少的两个城市,但我还找不到任何城市

示例数据:

ReferenceCity table
id name        site_id
1  newyork     1
2  california  1
3  texas       1    
4  newyork     2
5  california  2
6  texas       2
7  detroit     2
8  chicago     2
如何选择从站点获取底特律和芝加哥\u id=2
如果有人能帮忙,我很高兴:)

您可以使用
EXCEPT
子句隔离多余的行:

SELECT name
FROM reference_cities
WHERE site_id = 2

EXCEPT

SELECT name
FROM reference_cities
WHERE site_id = 1;
输出:

postgres=# create table reference_cities (id int, name text, site_id int);
CREATE TABLE
postgres=# insert into reference_cities values (1,'newyork',1),(2,'california',1),(3,'texas',1),(4,'newyork',2),(5,'california',2),(6,'texas',2),(7,'detroit',2),(8,'chicago',2);
INSERT 0 8
postgres=# SELECT name
FROM reference_cities
WHERE site_id = 2
EXCEPT
SELECT name
FROM reference_cities
WHERE site_id = 1;
  name   
---------
 chicago
 detroit
(2 rows)
披露:我为