python - 查询数据库中的 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_user
从表中获取user
登录用户的id; - 该变量
your_books
从表中获取user_books
登录用户添加的所有书籍; - 该变量
name_books
应该从表中获取由书籍 ( )books
的 id 过滤的书籍的所有数据。bid
当我尝试使用过滤时出现问题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,但我无法应用它。
我错过了什么?
解决方案
据我了解,并遵循一些逻辑,您想展示书籍,对吗?因此,请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
如果您有任何问题,请告诉我,我会澄清。
推荐阅读
- node.js - “PERMISSION_DENIED:权限缺失或不足”当使用谷歌云任务调用firestore函数时
- android - 如何管理多个匹配的意图过滤器
- powerbi - How to count number of repeated clients
- python - Function for resetting multiple input boxes to 0?
- bash - 从 GitHub 存储库克隆/下载特定文件
- java - How to automagically load a set of Java Projects in separate IDE instances when opening only one project?
- android - Hide ActionBar Android
- python - World coordinates to Images coordinates transform
- javascript - How can I make async await work inside a class?
- sgx - Can I use Intel SGX Debugger when I am not using Intel processor?