代码之家  ›  专栏  ›  技术社区  ›  user3422533

在sqlalchemy中使用postgres“时区时间”

  •  0
  • user3422533  · 技术社区  · 7 年前

    TAB = Table("tab", METADATA,
               # ...
    
               Column('created', DateTime(timezone=True), default=datetime.now)
               )
    

    现在我尝试插入一个新行。我收到这样的信息:

    (psycopg2.ProgrammingError) column "created" is of type time with time zone but expression is of type timestamp without time zone
    

    谢谢!

    0 回复  |  直到 7 年前
        1
  •  2
  •   benvc    7 年前

    主要问题似乎是您正在映射SQLALchemy DateTime PostgreSQL的列 time with time zone Time 相反。

    如果你想用PostgreSQL timestamp with time zone datetime.now 不知道时区。有几种方法可以处理这个问题,但是一个简单的方法是使用SQLAlchemy的 func.now() 相反。例如:

    from sqlalchemy import Column, DateTime, Integer, MetaData, Table
    from sqlalchemy.sql import func
    
    metadata = MetaData()
    
    example = Table('example', metadata,
        Column('id', Integer, primary_key=True),
        Column('date', DateTime(timezone=True), default=func.now())
        )