python - 如何查询学生所在类(class)的文件?

标签 python sql flask sqlalchemy flask-sqlalchemy

在用户的个人资料页面上,我想显示他所属类(class)的文件。 这是我在 models.py 中编写的flask和flask_sqlalchemy中的代码

我已经让下面的代码工作了,但正如你所看到的,它的效率不高。

files = []
for i in User.query.get(1).course:
    files.extend(i.files)

我想做如下的事情,但由于某些原因不起作用。

>>> db.session.query(File).join(course_files).join(course_students).all()

Traceback Exception (most recent call):
# 

具有关系的完整源代码。



class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    admin = db.Column(db.Boolean, default=False)
    username = db.Column(db.String(64), index=True, unique=True)
    mobile = db.Column(db.Integer, index=True, unique=True)
    password_hash = db.Column(db.String(128))
    last_seen = db.Column(db.DateTime, default=datetime.utcnow)


course_students = db.Table(
    'course_students',
    db.Column('course_id', db.Integer, db.ForeignKey('course.id')),
    db.Column('user_id', db.Integer, db.ForeignKey('user.id'))
)

course_files = db.Table(
    'course_files',
    db.Column('course_id', db.Integer, db.ForeignKey('course.id')),
    db.Column('file_id', db.Integer, db.ForeignKey('file.id'))
)


class Course(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String, nullable=False)
    fees = db.Column(db.String)
    timing = db.Column(db.Time, nullable=False)
    students = db.relationship('User', secondary=course_students,
                               backref=db.backref('course', lazy='dynamic'))
    files = db.relationship('File', secondary=course_files,
                            backref=db.backref('course', lazy='dynamic'))

    def __repr__(self):
        return f'<Course({self.name})>'


class File(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    filename = db.Column(db.String)
    timestamp = db.Column(db.DateTime, default=datetime.utcnow)
    data = db.Column(db.LargeBinary)
    length = db.Column(db.Integer, default=0)
    mime_type = db.Column(db.String, default='application/octet-stream')



最佳答案

如果没有异常详细信息,很难说,但您可能只是在连接中缺少一些过滤当前用户查询的指令。

如果您正在查看的用户位于变量“u”中,那么这样的查询只会返回该用户的相关文件。

db.session.query(File).join(course_files).join(course_students, course_students.c.user_id == u.id).all()

关于python - 如何查询学生所在类(class)的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59750041/

相关文章:

python - 无法从 Mechanize 导入浏览器

MySQL查询最近30天按天排序

php - 我无法使用 PHP 中的 select 语句从 MySQL 中获取多个值

python - 使用Flask错误处理程序立即捕获所有Werkzeug异常

python - Pandas 滚动窗口,带有过滤条件,删除一些最新数据

python - scipy curve_fi 返回初始参数估计

c# - 桌面 C# SQL Server (LocalDB) 数据库访问模式

url - Kubernetes 中的端点 URL 管理

python - 在 Flask 微框架中使用 WTForms 的 populate_obj( ) 方法

python - Pywin32 --> COM -->Powerpoint 教程?