Python 通过字段值和外键关系过滤记录
刚开始在flask中使用SQLAlchemy,我不知道如何编写这个查询。 我使用的模型: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
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()