Wpis z mikrobloga

Mirki z #programowanie #naukaprogramowania #python #flask (sorry za spam tagami)
mam takie pytanie, może mądre, może głupie, nie wiem.
Mam sobie aplikację napisaną w python, Flask-SQLAlchemy.
I w HTML formularz, który pobiera datę i godzinę.


no i potem chcę, żeby to zapisało się do pliku models, do bazy danych

data = db.Column(db.Date)

godzina = db.Column(db.Time)

ale okazuje się, że data w html ma inny format niż datetime w pythonie. Jak to ogarnąć?
Chcę porównać datę w bazie danych do daty obecnej (datetime.today) i wyciągnąc tylko te wpisy z bazy danych, które są starsze niż dzisiaj.
Jak ktoś dalej nie wie o co pytam, to TUTAJ lepiej jest to opisane, ale oczywiście bez odpowiedzi.
HALP PLS
  • 5
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

do apki pythonowej może to wpadać po prostu jako string, znając format (chyba w yyyy-mm-dd trafi requesta) możesz sobie go sparsować, coś z modułu datetime to na pewno potrafi.
  • Odpowiedz
@kao3991: no właśnie problem w tym, że żeby wyciągnąć z bazy konkretny wpis z datą, ona musi być już sparsowana, bo inaczej musiałabym porównywać string (w bazie danych) z data dzisiejszą (co nie ma sensu).
Chyba, że miałabym wyciągnąć wszystkie wpisy z bazy danych, wtedy sparsować, porównać i na stronie wyświetlić tylko te odfiltrowane, ale myślałam, że jest lepszy sposób.
  • Odpowiedz
@fiskarsa: W bazie masz mieć datę, na poziomie bazy operujesz tylko na datach. Z formularza dostajesz request z datami w stringach, parsujesz żeby mieć obiekt date, i takimi obiektami się posługujesz żeby wyciągnąć potrzebne dane w zapytaniu. SQLAlchemy elegancko się potrafi nimi posługiwać.
W tym pytaniu na stacku parsowanie powinno być przed zapytaniem, tak żeby akcja wyglądała mniej więcej tak:

if 'searchdate' in request.form:
date = datetime.strptime(request.form["searchdate"], "TU FORMAT")
return render_template("indx.html",
  • Odpowiedz
@fiskarsa: jepiej date+time zapisywac w typie DateTime ale jak koniecznie chcesz oddzielnie to mozesz

from datetime import datetime
dateinput = '2001-09-11'
time
input = '09:11:01'
  • Odpowiedz