Python 通过字段值和外键关系过滤记录

Python 通过字段值和外键关系过滤记录,python,flask,sqlalchemy,flask-sqlalchemy,Python,Flask,Sqlalchemy,Flask Sqlalchemy,刚开始在flask中使用SQLAlchemy,我不知道如何编写这个查询。 我使用的模型: class User(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(20), unique=True, nullable=False) email = db.Column(db.String(20), unique=True, null

刚开始在flask中使用SQLAlchemy,我不知道如何编写这个查询。 我使用的模型:

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(20), unique=True, nullable=False)
    password = db.Column(db.String(120), nullable=False)
    role = db.Column(db.String(5), nullable=False, default='user')
    # This field represents the many files one user can have
    files = db.relationship('Files', backref='owner', lazy=True)

    def __repr__(self):
        return f"User('{self.username}', '{self.email}', '{self.password}', '{self.role}', '{self.files}')"

class Files(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    filename = db.Column(db.String(40), unique=True, nullable=False)
    date_modified = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    owner_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

    def __repr__(self):
        return f"Files('{self.filename}', '{self.owner_id}', '{self.date_modified}')"
说明:用户与他拥有的多个文件有一对多关系

所以我有一个用户名和一个文件名,我试图提取具有匹配文件名的特定用户的文件。

多用户-->单用户-->用户文件-->具有我需要的特定名称的文件

我试图找到一个解决方案,但被各种不同的功能和查询方式弄得不知所措

我已经尝试过的是,假设filename字段是唯一的,获取具有特定文件名的所有文件。但即使这样也不起作用:

requested_file = User.query.join(Files).filter(Files.filename == searched_filename).first()
如果您能提供帮助,我将不胜感激。请尝试以下方法:

requested_files = Files.query.filter_by(filename==searched_filename, owner_id=user_id).all()
别搞砸了,换你的衣服

files=db.relationship('files',backref='owner',lazy=True)

owner\u id=db.Column(db.Integer,db.ForeignKey('user.id'),nullable=False)

进入

files=db.relationship('files',backref='user',lazy=True)

user\u id=db.Column(db.Integer,db.ForeignKey('user.id'),nullable=False)


同时,出现错误
AttributeError:'NoneType'对象没有属性“filename”
,因为您已经加入
文件,所以文件表中没有
文件。确保您使用模型进行了迁移,并且数据库中有数据。

很可能您通过将
文件分配到代码中的某个位置将其“隐藏”到
文件中。
。谢谢您,这很有效,似乎是一个非常简单易懂的解决方案!我从错误的方向接近它,我尝试通过查询访问用户表和文件表,而我可以直接查询文件表。
requested_files = Files.query.filter_by(filename==searched_filename, owner_id=user_id).all()