首页 > 解决方案 > 查询数据库中的 3 个表时,“列表对象没有属性”

问题描述

我正在 3 个表上运行查询和过滤结果。

我写了下面的函数来执行这个查询,它看起来像这样:

def bookshelf():
     your_user = db.session.query(User).filter_by(email=session['email']).first().uid
     your_books = db.session.query(user_book).filter_by(uid=your_user).all()
     name_books = db.session.query(Book).filter_by(bid=your_books.bid).all()
     return name_books

当我尝试使用过滤时出现问题your_books.bid,控制台返回:

AttributeError:“列表”对象没有属性“出价”

这些是上面引用的表格:

user_book = db.Table('user_book',
                     db.Column('uid', db.Integer, db.ForeignKey('user.uid'), primary_key=True),
                     db.Column('bid', db.Text, db.ForeignKey('book.bid'), primary_key=True),
                     db.Column('date_added', db.DateTime(timezone=True), server_default=db.func.now())
                     )


class User(db.Model):
    __tablename__ = 'user'

    uid = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(25), nullable=False)
    hash = db.Column(db.String(), nullable=False)
    first_name = db.Column(db.String(30), nullable=True)
    last_name = db.Column(db.String(80), nullable=True)
    books = db.relationship('Book', secondary=user_book)


class Book(db.Model):
    __tablename__ = 'book'

    bid = db.Column(db.Text, primary_key=True)
    title = db.Column(db.Text, nullable=False)
    authors = db.Column(db.Text, nullable=False)
    thumbnail = db.Column(db.Text, nullable=True)
    users = db.relationship('User', secondary=user_book)

我也尝试做类似的事情,your_books = db.session.query(user_book.bid)但我得到了同样的错误信息。

我还找到了这个答案:Sqlalchemy single query for multiple rows from one column in a table,但我无法应用它。

我错过了什么?

标签: pythonpostgresqlflask-sqlalchemyquerying

解决方案


据我了解,并遵循一些逻辑,您想展示书籍,对吗?因此,请query(User)使用query(Book). 然后,您可以.join()按照评论中的说明进行操作。

def bookshelf():
    your_user = db.session.query(User).filter_by(email=session['email']).first().uid
    your_books = db.session.query(Book).join(user_book).filter_by(uid=your_user).all()
    return your_books

如果您有任何问题,请告诉我,我会澄清。


推荐阅读