簡體   English   中英

SQLalchemy 過濾查詢只返回第一行

[英]SQLalchemy filter query only returning first row

我遇到了 SQLalchemy 查詢的問題。 當我查詢一個特定的表時,它返回 7 個項目,但是當我遍歷它時,它只找到一個項目。

這是查詢;

seasons = db.session.query(Seasons).filter(Seasons.tmdb_id == tmdb_id)

我知道它返回 7 個項目,因為我立即鍵入以下內容並打印數字“7”;

print(seasons.count())

但是,當我嘗試像這樣遍歷本季 object 並期望獲得 7 個名字時,我只得到一行和一個名字。

for item in seasons:
    print(item.name)

這是我的 models.py 中的 Seasons class

# Main TV show table
class Seasons(db.Model):
    __tablename__ = 'tv_seasons'
    tmdb_id = db.Column(db.Integer, primary_key=True)
    season_id = db.Column(db.Integer)
    air_date = db.Column(db.String)
    name = db.Column(db.String)
    episode_count = db.Column(db.Integer)
    overview = db.Column(db.String)
    poster_path = db.Column(db.String)
    season_number = db.Column(db.Integer)

知道為什么會這樣嗎?

因為count() function 返回一個 int 值。 看一看: https://docs.sqlalchemy.org/en/14/orm/query.html#sqlalchemy.orm.Query.count

SELECT count(1) AS count_1 FROM (
    SELECT <rest of query follows...>
) AS anon_1

上面的SQL返回單行,是計數function的聚合值; Query.count() 方法然后返回單個 integer 值。

因此,您應該使用Query(...).all()來迭代項目。

然后使用if檢查是否有數據:

seasons = query(...).all()

if seasons: 
    for item in seasons:
        print(item.name)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM