У меня проблема, при которой SQLAlchemy (версии 0.6.4 и 0.6.8) теряет информацию о часовом поясе из объекта datetime
при фиксации в базе данных SQLite со столбцом, определенным с помощью SQLAlchemy DateTime.
класс. (Я понимаю, что SQLAlchemy преобразует это в строку и обратно, что, по моему мнению, составляет половину проблемы).
Как код spe aks громче слов, у меня есть следующий пример / воспроизводитель:
import datetime, pytz, sqlalchemy
from sqlalchemy import create_engine, Column, Integer, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
engine = create_engine('sqlite:///:memory:', echo=True)
Base = declarative_base()
Session = sessionmaker(bind=engine)
session = Session()
class Example(Base):
__tablename__ = "example"
id = Column(Integer, primary_key=True)
date = Column(DateTime(timezone=True))
def __init__(self, date):
self.date = date
Base.metadata.create_all(engine)
aucklandtz = pytz.timezone('Pacific/Auckland')
exdatetime = datetime.datetime(2011,8,8,2,23)
print aucklandtz, exdatetime
# inject TZ to exdatetime:
injdatetime = aucklandtz.localize(exdatetime)
print injdatetime
newrecord = Example(injdatetime)
print newrecord.date
session.add(newrecord)
session.commit()
print newrecord.date
Из вывода консоли главное, что он вставляет запись в SQLite как значение '2011-08-08 02: 23: 00.000000 '
.
Есть ли простой способ исправить это, или мне нужно добавить информацию TZ в отдельный столбец / сохранить все как временные метки и перемещаться между форматами?