【发布时间】:2016-02-06 23:21:49
【问题描述】:
我所有的 SQLAlchemy 模型都可以查询,但是有一个可以给我:
more than one row returned by a subquery used as an expression
这是由 SQLAlchemy 生成的(缩短的)SQL:
SELECT poi.key
,poi.pok
,poi.noc
,coalesce((
SELECT CASE
WHEN (sum(item.noc) IS NULL)
THEN NULL
ELSE :param_1
END AS anon_1
FROM item,poi
WHERE poi.key = item.poi_key
GROUP BY item.key
), poi.noc) AS coalesce_1
,coalesce((
SELECT sum(soi.noc) AS sum_1
FROM soi
WHERE soi.poi_key = poi.key
AND soi.is_shipped = 0
), :param_2) AS coalesce_2
,coalesce((
SELECT CASE
WHEN (sum(item.noc) IS NULL)
THEN NULL
ELSE :param_1
END AS anon_1
FROM item,poi
WHERE poi.key = item.poi_key
GROUP BY item.key
), poi.noc) - ee((
SELECT sum(soi.noc) AS sum_1
FROM soi
WHERE soi.poi_key = poi.key
AND soi.is_shipped = 0
), :param_2) AS anon_2
FROM poi
型号是:
class POI(Base):
key = Column(Integer, primary_key=True)
pok = Column(Integer, nullable=False)
noc = Column(Integer, nullable=False)
__table_args__ = (UniqueConstraint(pok,),
ForeignKeyConstraint([pok],),{})
我正在使用scoped_session,因为我的应用程序是多线程的,我认为这可能是问题所在。但事实并非如此。我已经尝试过使用Session 的所有变体,但问题仍然存在。奇怪的是,在应用程序初始化时,当启动多个从数据库获取数据的线程时,只有这个查询会抛出错误。仅调用此查询(手动)以某种方式工作正常。所以问题显然在于与其他查询的交互。
这个错误对我来说有点模糊,但我认为问题在于子查询应该返回一个结果,而不是很多。我不知道从哪里开始寻找答案。是线程问题吗?会话问题?还有什么?
【问题讨论】:
-
my application is multi-threaded and I ...行为应该不取决于线程。如果是……如果不是…… -
在我看来 sqlalchemy 应该使用连接而不是子选择。
标签: postgresql sqlalchemy