【问题标题】:File database relationship, sqlalchemy, flask文件数据库关系,sqlalchemy,flask
【发布时间】:2019-04-09 11:09:42
【问题描述】:

大家好!
我正在使用烧瓶制作一个网站,老师可以在其中发布家庭作业文件,学生可以在帖子上发表评论,并附上解决方案文件。但我坚持建立作业文件和解决方案文件之间的关系。 这是我的模型文件:

from blog import login
from blog import db
from datetime import datetime
from flask_login import UserMixin


@login.user_loader
def load_user(id):
    return User.query.get(int(id))


class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    access_level = db.Column(db.Integer)
    username = db.Column(db.String(64), index=True, unique=True)
    password = db.Column(db.String(128))
    fullname = db.Column(db.String(128), index=True)
    email = db.Column(db.String(120), index=True, unique=True)
    phone_number = db.Column(db.String(10), index=True, unique=True)
    homework = db.relationship("HomeWork", backref="author", 
        lazy="dynamic")
    answer = db.relationship("Solution", backref="author", 
        lazy="dynamic")

    def __repr__(self):
        return "<User {}>".format(self.username)

    def check_password(self, password):
        return self.password == password

    def is_teacher(self):
        return self.access_level == 1


class HomeWork(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))
    data = db.Column(db.LargeBinary)
    timestamp = db.Column(db.DateTime, index=True, 
        default=datetime.now)
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"))



class Solution(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    timestamp = db.Column(db.DateTime, index=True, 
        default=datetime.now)
    data = db.Column(db.LargeBinary)

我想将作业文件保存到数据库中,以便学生查看并发布每个作业的解决方案。当有人进入家庭作业页面时,它会在主帖中显示家庭作业文件,并且学生的 cmets 会包含他们的家庭作业解决方案文件
请帮我解决这个问题!
非常感谢!

【问题讨论】:

  • 你怎么卡住了?
  • @IljaEverilä 我想将作业文件保存到数据库中,以便学生可以查看并发布每个作业的解决方案。当有人进入家庭作业页面时,它会在主帖中显示家庭作业文件,并且学生的 cmets 会包含他们的家庭作业解决方案文件

标签: python sqlalchemy relationship


【解决方案1】:

我假设您的问题是将作业文件保存到数据库中,以便学生可以查看它然后发布解决方案,对吗? 因此,如果是这种情况,您不要直接将文件存储到 SQL 数据库中。

相反,您将文件上传到特定目录,例如“家庭作业”(所有文件都将上传到此处)。

在上传时,您将使用“唯一 id”重命名文件(这可以跳过,但这是一个好习惯。因为名称并不总是有序的)

然后将“唯一 id”存储在“作业”表中,对照其实际名称和其他元数据(如教师等)。

因此,每当学生请求家庭作业文件时,都会找到针对它的“唯一 ID”(也恰好是文件名)。然后返回具有相同“唯一 id”的文件。

您的“解决方案”的类似方式。

一个很好的链接让你开始在 Flask 中上传文件:Flask File Upload

【讨论】:

  • 对不起,我不清楚的问题描述。我的问题是没有将文件保存到数据库中。我在我的代码下添加了我的问题。
  • 您可以使用相同的解决方案来解决您的问题。正如我上面提到的,您不应该直接将文件作为二进制数据存储在 dbs 中。相反,将它们上传到您的服务器并将链接存储在数据库中。所以解决你的问题:当老师创建作业条目时,文件被上传,唯一的 id、文件名和标题存储在 db.xml 中。当学生进入家庭作业页面时,所有标题都会列出,并带有指向文件名的链接。这样当点击链接时,文件就会被下载。然后学生提交解决方案,并根据硬件的 id 存储解决方案。
猜你喜欢
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-24
  • 1970-01-01
  • 2023-03-16
  • 2014-03-25
相关资源
最近更新 更多