【问题标题】:How do you write Python datetime in JSON format?你如何以 JSON 格式编写 Python 日期时间?
【发布时间】:2020-07-18 01:43:35
【问题描述】:

我目前正在制作一个 Flask 应用程序,我正在尝试通过 Postman 将输入添加到我的数据库中。

这是我的models.py:

from datetime import datetime

class PracticeRecord(db.Model):
    __tablename__ = "practice_record"
    id = db.Column(db.Integer, primary_key=True)
    description = db.Column(db.String(100))
    date = db.Column(db.DateTime, default=datetime.now)
    minutes = db.Column(db.Integer)
    created = db.Column(db.DateTime, default=datetime.now)
    updated = db.Column(db.DateTime, default=datetime.now)
    #userID

这是我的 routes.py:

from .import db
from .models import PracticeRecord

main = Blueprint('main', __name__)

@main.route('/add_practicerecord', methods=['POST'])
def add_practiceRecord():
    practiceRecord_data = request.get_json()

    new_practiceRecord = PracticeRecord(description=practiceRecord_data['description'], 
                        date=practiceRecord_data['date'], minutes=practiceRecord_data['minutes'])

    db.session.add(new_practiceRecord)
    db.session.commit()

    return 'Done', 201

当我在 Postman 中输入 JSON 数据时,我得到了 error。 它说 SQLite DateTime 类型只接受 Python 日期时间和日期对象作为输入。但不是:

"date": "2020-04-06T14:42:24.996181"

已经是那种格式了?我很困惑。

在这方面的任何帮助都会很棒。

【问题讨论】:

  • 这是一个字符串,而不是 datetime 或 date 对象。
  • 我有些怀疑。这些概念称为序列化和反序列化。我也在学习。我想你也应该这样做。
  • @Barmar 我尝试删除引号,但最终无法解码 JSON 对象。
  • 解码JSON后需要将字符串转换为日期时间。

标签: python json sqlite datetime flask


【解决方案1】:

为了将datetime 保存在数据库中,您必须创建datetime 对象而不是其字符串值。 practiceRecord_data['date'] 是日期时间的字符串值。使用datetime.strptime:

@main.route('/add_practicerecord', methods=['POST'])
def add_practiceRecord():
    practiceRecord_data = request.get_json()
    datetime = datetime.strptime(practiceRecord_data['date'], '%Y-%m-%dT%H:%M:%S.%f')

new_practiceRecord = PracticeRecord(description=practiceRecord_data['description'], 
                    date=datetime, minutes=practiceRecord_data['minutes'])

db.session.add(new_practiceRecord)
db.session.commit()

return 'Done', 201

【讨论】:

  • 这可能是解决方案。这可能有助于理解,但我认为这是不鼓励的。有专门为此设计的序列化器和反序列化器。
  • @Rahul 你的意思是使用类似flask-serialize 的东西?
  • 是的。类似的东西。我还没有使用烧瓶,所以我不能推荐任何东西。您必须自己寻找适合您需要的。
  • 感谢@shotgunner,您的解决方案有效,同时将使用它
  • @Rahul 谢谢,我已经搜索了更多关于 flask-serialize 但遗憾的是还没有让它工作,所以我现在要坚持使用其他解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-27
  • 2018-10-16
  • 1970-01-01
  • 2013-07-13
相关资源
最近更新 更多