python—“在查询数据库中的3个表时,列表对象没有属性”

mzaanser  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(444)

我正在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_user 从表中获取 user 登录用户的id;
变量 your_books 从表中获取 user_books 登录用户添加的所有图书;
变量 name_books 应该从table上拿下来 books 按图书id筛选的图书的所有数据( bid ).
当我尝试使用 your_books.bid ,控制台返回:
attributeerror:“list”对象没有属性“bid”
上述表格如下:

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针对一个表中一列中的多行执行单一查询,但我无法应用它。
我错过了什么?

pbgvytdp

pbgvytdp1#

据我所知,按照一些逻辑,你想展示这些书,对吗?所以不是 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

如果你有任何问题,让我知道,我会澄清。

相关问题