Python Flask - 上传 csv 文件并发布到数据库时需要插入时间戳

Python Flask - Need to insert timestamp when a csv file is uploaded and posted to database

我正在创建一个允许您上传 .csv 文件的表单,然后在提交时将上传的文件添加到名为“文件”的 table 数据库中。

我想弄清楚的是如何在文件上传时插入时间戳,以便在 HTML 端显示上传的文件及其日期和时间是 uploaded/posted.

我之前尝试的是给我当地时间,它会随着刷新而不断变化,但我想要文件上传的确切日期和时间。本质上,当您在文件资源管理器中单击文件的属性时,类似于“已创建”时间戳。

我意识到我可能需要在我的文件 class/table 中为 DateTime 添加另一个属性,以便它可以发布到数据库,然后呈现到 HTML.

这是我的class“文件”:

class Files(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String, nullable=False)
    data = db.Column(db.LargeBinary)
    f_source_id = db.Column(db.Integer, db.ForeignKey('funding_source.id'), nullable=True)

这是我将上传的文件发布到数据库的地方:

@main.route("/upload_file", methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST' and 'csvfile' in request.files:
        f = request.files['csvfile']

        # pressing submit without uploading a file
        if f.filename == "":
            flash("No selected file. Please attach CSV file", "danger")
            return redirect(url_for('main.alloc_summ'))
        # only allowing .csv extension files
        if f.filename and not allowed_file(f.filename):
            flash("Only CSV Files Allowed", "danger")
            return redirect(url_for('main.alloc_summ'))
        # opening file, reading it in, and inserting values to database
        if f.filename != '' and allowed_file(f.filename):
            with open('<hidden path url>', 'r') as csv_file:
                csv_reader = csv.reader(csv_file, delimiter=',')
                new_file = Files(name=f.filename, data=f.read())
                db.session.add(new_file)
                db.session.commit()
                flash("File Uploaded", "success")
                return redirect(url_for('main.alloc_summ'))

如果有人能指导我如何获取文件 uploaded/posted 到数据库的时间戳,以便我可以查询文件 table 以显示文件,我将不胜感激和 HTML 侧的时间戳。 TIA!!

我认为如果您向包含时间戳的数据库模型添加另一列就足够了。一旦创建数据库条目,它就会自动填充一个值。所以应该可以满足你的要求。

from datetime import datetime

class Files(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    created_at = db.Column(db.DateTime,
        nullable=False, unique=False, index=False,
        default=datetime.utcnow)
    # ...

可以用Flask-Moment to show the timestamp. It uses Moment.js显示。