Алхимия SQL - Установка даты и времени в виде строки и получение даты? - PullRequest
0 голосов
/ 04 ноября 2019

В настоящее время я настраиваю класс с использованием SQL Alchemy. Этот класс имеет атрибут start_date, определенный следующим образом:

from sqlalchemy import Column, DateTime
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class Foo(Base):
    __tablename__ = "foo"

    id = Column(UUID(as_uuid=True), primary_key=True)
    start_date = Column(DateTime, nullable=True)

Тем не менее, я сталкиваюсь с проблемой типа:

foo = Foo(start_date="2019-05-05")
print(foo.start_date, type(foo.start_date))

# 2019-05-05 <class 'str'>

Я бы ожидал дату и время здесь, особенно какпри извлечении той же записи из базы данных я получаю объект даты и времени:

foo = Foo(id=uuid.uuid4(), start_date="2019-05-05")
db_session.add(foo)
db_session.commit()

db_session.refresh(foo)
print(foo.start_date, type(foo.start_date))

# 2019-03-01 00:00:00 <class 'datetime.datetime'>

Есть ли способ вызвать приведение из объявления Column?

1 Ответ

1 голос
/ 04 ноября 2019

Я подозреваю, что здесь происходит то, что вы на самом деле получаете доступ в первом фрагменте - это та самая строка, которую вы передали в качестве аргумента ключевого слова start_date. Это предполагает, что SQLAlchemy на самом деле не приводит к типу вашего ввода.

Когда объект фиксируется в базе данных, эта строка ('2019-05-05') передается в Postgres. Поскольку SQL выполняет приведение типов в кавычках и имеет правильный формат, он добавляется в базу данных как отметка времени.

После вставки вся строка считывается из базы данных. Это вернуло бы экземпляр datetime, а атрибуту было бы присвоено значение datetime.

Имейте в виду, что это отчасти является гипотезой с моей стороны, и я на самом деле не искал способ обработки SQLAlchemy. входные значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...