Как вы пишете Python datetime в JSON формате? - PullRequest
0 голосов
/ 06 апреля 2020

В настоящее время я создаю приложение Flask и пытаюсь добавить входные данные в свою базу данных через почтальона.

Это мои 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

Это мой rout.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

Когда я вставляю данные JSON в Почтальон, я получаю эту ошибку . Он говорит, что тип SQLite DateTime принимает только Python объекты даты и времени в качестве входных данных. Но разве:

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

уже в этом формате? Я так растерялся.

Любая помощь в этом была бы великолепна.

1 Ответ

0 голосов
/ 06 апреля 2020

Чтобы сохранить 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...