Я пишу приложение Flask, используя SQLAlchemy и SQlite.
Модель выглядит следующим образом:
class User(UserMixin, db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True)
member_since = db.Column(db.DateTime())
def __repr__(self):
msg = f"<User username: {self.username}, id: {self.id}, member_since: {self.member_since}"
return msg
Когда я выполняю следующий тест:
import unittest
from app import create_app, db
from app.models import User
from datetime import datetime
class UserModelTestCase(unittest.TestCase):
def setUp(self):
self.app = create_app('testing')
self.app_context = self.app.app_context()
self.app_context.push()
db.create_all()
def test_valid_confirmation_token(self):
print("Create and save new user...")
u1 = User(password='cat', username="John", member_since=datetime.utcnow())
print(u1)
db.session.add(u1)
db.session.commit()
print("Retrieving saved user from DB...")
u2 = User.query.filter_by(username="John").first()
print(u2)
Я получаю следующее исключение:
Создание и сохранение нового пользователя ...
Имя пользователя: John, id: None, member_since: 2020-04-28 05:04: 18.570841
Извлечение сохраненного пользователя из БД ...
Выполнение теста 1 за 1,297 с
СБОЙ (ошибки = 1)
Ошибка
Трассировка (самая последняя последний вызов):
Файл "C: \ Users \ morne \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ unittest \ case.py", строка 59, в testPartExecutor
yield
Файл "C: \ Users \ morne \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ unittest \ case.py", строка 615, в прогоне
testMethod ()
Файл "C: \ Users \ morne \ PycharmProjects \ Flasky \ tests \ 1.py ", строка 21, в test_valid_confirmation_token
u2 = User.query.filter_by (username =" John "). First ()
File" C: \ Users \ Морн \ PycharmProjects \ Flasky \ venv \ Lib \ сайт-пакет s \ sqlalchemy \ orm \ query.py ", строка 3300, в первом
ret = list (self [0: 1])
Файл" C: \ Users \ morne \ PycharmProjects \ Flasky \ venv \ lib \ site-packages \ sqlalchemy \ orm \ query.py ", строка 3078, в getitem
список возврата (res)
Файл" C: \ Users \ morne \ PycharmProjects \ Flasky \ venv \ lib \ site-packages \ sqlalchemy \ orm \ loading.py ", строка 101, в случаях
cursor.close ()
Файл" C: \ Users \ morne \ PycharmProjects \ Flasky \ venv \ lib \ site-packages \ sqlalchemy \ util \ langhelpers.py ", строка 69, в выход
exc_value, with_traceback = exc_tb,
файл" C: \ Users \ morne \ PycharmProjects \ Flasky \ venv \ lib \ site-packages \ sqlalchemy \ util \ compat.py ", строка 178, в повышение_
повышение исключения
Файл" C: \ Users \ morne \ PycharmProjects \ Flasky \ venv \ lib \ site-packages \ sqlalchemy \ orm \ loading.py ", строка 81, в случаях
rows = [pro c (row) для строки в выборке]
File" C: \ Пользователи \ morne \ PycharmProjects \ Flasky \ venv \ lib \ site-packages \ sqlalchemy \ orm \ loading.py ", строка 81, в
строки = [pro c (строка) для строки в выборке]
Файл "C: \ Users \ morne \ PycharmProjects \ Flasky \ venv \ lib \ site-packages \ sqlalchemy \ orm \ loading.py ", строка 645, в _instance
заполнителях,
файл" C: \ Users \ morne \ PycharmProjects \ Flasky \ venv \ lib \ site-packages \ sqlalchemy \ orm \ loading.py " , строка 782, в _populate_partial
dict_ [key] = getter (row)
ValueError: час должен быть в 0..23
Я подтвердил, что значение DateTime действительно зафиксировано в базу данных. Поэтому я считаю, что исключение возникает, когда SQLAlchemy пытается преобразовать значение DateTime в таблице SQLite в Python тип datetime?
Любая помощь будет принята с благодарностью.
EDIT:
Обратите внимание, что в консоли python я могу выполнить следующее:
>>> from sqlalchemy import create_engine
>>> engine = create_engine('sqlite:///data-test.sqlite')
>>> result = engine.execute("select * from users")
>>> row = result.fetchone()
>>> row
>>> (1, None, 'John', 'pbkdf2:sha256:150000$x3DBvNDA$8ed0a9c11d5bc1f4772ac5b6167402044f9bc865e22f83c813d86f4f0c9678ec', None, 0, None, None, None, '2020-04-28 05:04:18.570841')