Передача объекта даты из пользовательского ввода в БД (sqlalchemy) - PullRequest
0 голосов
/ 10 мая 2019

Я до сих пор безуспешно пытался сохранить определенные данные в модели базы данных. Проблема, насколько я могу понять, это объект даты, независимо от того, что я делаю, это не сохранит. Дата вводится пользователем из формы.

@app.route('/upload/', methods=['GET', 'POST'])
def upload_file():
    if request.method=='POST':
        something = Schedule(
        start_time = request.form.get('start_time'),
        end_time = request.form.get('end_time'),
        duration =  request.form.get('duration'),
        action =  request.form.get('action'),
        location_name = request.form.get('location_name'), 
        vehicle_name = request.form.get('vehicle_name'),
        post_time = request.form.get('post_time'))
        db.session.add(something)
        db.session.commit()

    return render_template('index.html')

Это маршрут.

Ниже приводится модель

class Schedule(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    start_time = db.Column(db.String(20))
    end_time = db.Column(db.String(20))
    duration = db.Column(db.Integer) 
    action = db.Column(db.String(20))
    location_name = db.Column(db.String(64))
    vehicle_name = db.Column(db.String(20))
    post_time = db.Column(db.DateTime())

Когда я получаю доступ к маршруту, я получаю 200, но добавляется только строка без данных, кроме автоматического увеличения поля (id). Я также могу быть совершенно не прав насчет того, с чего начать.

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Тип SQLite DateTime принимает только Python datetime и объекты даты в качестве входных данных.Предполагая, что вы используете datetime-local в качестве типа ввода атрибута, начните с замены буквы T пробелом, а затем проанализируйте всю строку в Python datetime на datetime.strptime.

Например:

2019-05-21T17: 29
" T " появляется буквально в строке, чтобы указать началоэлемент времени, как указано в ISO 8601.

from datetime import datetime

time = request.form.get('post_time')
time_old = time.replace('T', ' ')
time_new = datetime.strptime(time_old, '%Y-%m-%d %H:%M')
post_time = time_new

Более конкретно:

from datetime import datetime

class Schedule(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    start_time = db.Column(db.String(20))
    end_time = db.Column(db.String(20))
    duration = db.Column(db.Integer)
    action = db.Column(db.String(20))
    location_name = db.Column(db.String(64))
    vehicle_name = db.Column(db.String(20))
    post_time = db.Column(db.DateTime)


@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
    if request.method=='POST':
        time = request.form.get('post_time')
        time_old = time.replace('T', ' ')
        time_new = datetime.strptime(time_old, '%Y-%m-%d %H:%M')
        something = Schedule(
        start_time = request.form.get('start_time'),
        end_time = request.form.get('end_time'),
        duration =  request.form.get('duration'),
        action =  request.form.get('action'),
        location_name = request.form.get('location_name'),
        vehicle_name = request.form.get('vehicle_name'),
        post_time = time_new
        )
        db.session.add(something)
        db.session.commit()

    return render_template('input.html')
0 голосов
/ 14 мая 2019

Попробуйте без использования __init__:

something = Schedule()
something.start_time = request.form.get('start_time')
something.end_time = request.form.get('end_time')
something.duration =  request.form.get('duration')
something.action =  request.form.get('action')
something.location_name = request.form.get('location_name')
something.vehicle_name = request.form.get('vehicle_name')
something.post_time = request.form.get('post_time')
db.session.add(something)
db.session.commit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...