SQLAlchemy теряет информацию о часовом поясе с SQLite

У меня проблема, при которой 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 в отдельный столбец / сохранить все как временные метки и перемещаться между форматами?

5
задан Marcelo Cantos 15 August 2011 в 11:03
поделиться