Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.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 SqlAlchemy ORM和聚合函数_Python_Postgresql_Orm_Sqlalchemy - Fatal编程技术网

Python SqlAlchemy ORM和聚合函数

Python SqlAlchemy ORM和聚合函数,python,postgresql,orm,sqlalchemy,Python,Postgresql,Orm,Sqlalchemy,我正在使用sqlalchemy ORM从Postgresql数据库获取数据,我很想知道您是如何使用sqlalchemy ORM进行复杂查询的,如下所示: select table1.name, Array(select name from table2 join table3 using(id) where param1=6949) from table1 where param1=6949 您可以使用with。根据您映射表的方式(作为ORM模型或Tables): # ORM mappings

我正在使用sqlalchemy ORM从Postgresql数据库获取数据,我很想知道您是如何使用sqlalchemy ORM进行复杂查询的,如下所示:

select table1.name, Array(select name from table2 join table3 using(id) where param1=6949)
from table1
where param1=6949
您可以使用with。根据您映射表的方式(作为ORM模型或
Table
s):

# ORM mappings here
stmt = session.query(Table2.name).\
    join(Table3, Table2.id == Table3.id).\
    filter_by(param1=Table1.param1)

query = session.query(Table1.name,
                      func.array(stmt.as_scalar())).\
    filter_by(param1=6949)
数组构造函数要求子查询生成一个列。子查询必须用作表达式,并且还必须从from对象列表中删除,这可以使用来完成

一个具体的例子:

In [2]: class Table1(MagicBase):
   ...:     name = Column(Unicode)
   ...:     param1 = Column(Integer)
   ...:     

In [3]: class Table2(MagicBase):
   ...:     name = Column(Unicode)
   ...:     

In [4]: class Table3(MagicBase):
   ...:     param1 = Column(Integer)
   ...:     

In [5]: stmt = session.query(Table2.name).\
   ...:     join(Table3, Table2.id == Table3.id).\
   ...:     filter_by(param1=Table1.param1)
   ...: 
   ...: query = session.query(Table1.name,
   ...:                       func.array(stmt.as_scalar())).\
   ...:     filter_by(param1=6949)
   ...: 

In [6]: print(query)
SELECT table1.name AS table1_name, array((SELECT table2.name 
FROM table2 JOIN table3 ON table2.id = table3.id 
WHERE table3.param1 = table1.param1)) AS array_1 
FROM table1 
WHERE table1.param1 = %(param1_1)s
您可以使用with。根据您映射表的方式(作为ORM模型或
Table
s):

# ORM mappings here
stmt = session.query(Table2.name).\
    join(Table3, Table2.id == Table3.id).\
    filter_by(param1=Table1.param1)

query = session.query(Table1.name,
                      func.array(stmt.as_scalar())).\
    filter_by(param1=6949)
数组构造函数要求子查询生成一个列。子查询必须用作表达式,并且还必须从from对象列表中删除,这可以使用来完成

一个具体的例子:

In [2]: class Table1(MagicBase):
   ...:     name = Column(Unicode)
   ...:     param1 = Column(Integer)
   ...:     

In [3]: class Table2(MagicBase):
   ...:     name = Column(Unicode)
   ...:     

In [4]: class Table3(MagicBase):
   ...:     param1 = Column(Integer)
   ...:     

In [5]: stmt = session.query(Table2.name).\
   ...:     join(Table3, Table2.id == Table3.id).\
   ...:     filter_by(param1=Table1.param1)
   ...: 
   ...: query = session.query(Table1.name,
   ...:                       func.array(stmt.as_scalar())).\
   ...:     filter_by(param1=6949)
   ...: 

In [6]: print(query)
SELECT table1.name AS table1_name, array((SELECT table2.name 
FROM table2 JOIN table3 ON table2.id = table3.id 
WHERE table3.param1 = table1.param1)) AS array_1 
FROM table1 
WHERE table1.param1 = %(param1_1)s

我认为您可能正在寻找的术语是“相关子查询”:我会给您一个例子,但从您编写的内容来看,我不确定您试图进行的查询以及数据的结构。我认为您可能正在寻找的术语是“相关子查询”:我会给您一个例子,但是从你写的内容来看,我不确定你想做什么查询,也不确定你的数据结构是什么。