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显示。
我正在创建一个允许您上传 .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显示。