【发布时间】:2015-06-15 15:08:54
【问题描述】:
托管我的db 的服务器位于U.S 中。当我向db 添加项目时,我希望使用Australia/Sydney 时间来存储时间。无论用户在哪个国家/地区,如果他们检索此记录,则应使用Australia/Sydney 时间返回。目前我正在这样做:
tz = pytz.timezone('Australia/Sydney')
orderDate = datetime.now(tz)
return add_order_to_db(orderID, orderDate, orderCost) # Adds an ORDER object to db
当我想为上述ORDER 对象更新orderDate 时,就会出现问题。
tz = pytz.timezone('Australia/Sydney')
orderDate = datetime.now(tz)
with contextlib.closing(DBSession()) as session:
try:
existingOrder = session.query(ORDER).filter_by(ORDERSID=orderID).first()
existingOrder.ORDERSDATE = orderDate
session.commit()
except exc.SQLAlchemyError, error:
session.rollback()
raise_database_error(error)
ORDER 对象
class ORDER(Base):
__tablename__ = 'ORDERS'
ORDERSID = Column(Integer, primary_key=True)
ORDERSDATE = Column(DateTime, nullable=False)
ORDERSCOST = Column(Numeric(19, 4), nullable=False)
在mySQL 中,ORDERSDATE 是一个Datetime 变量。
【问题讨论】:
-
它看起来像MySQL-python doesn't support timezone-aware datetime objects。您可以尝试为 MySQL 数据库连接设置澳大利亚/悉尼时区并使用简单的日期时间对象(如果使用 TIMESTAMP 类型),或者在将时区信息放入数据库并在从数据库中检索时重新附加它之前剥离时区信息)。或者(更好)使用朴素的 datetime 对象来表示 UTC 时间(否则某些时间值可能不明确)
标签: python mysql datetime sqlalchemy