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

use*_*533 2 python postgresql time datetime sqlalchemy

我在 python 3.7 中使用 postgres 和 sqlalchemy

我有一个类型为“time with timezone”的列并尝试插入一个新行。

TAB = Table("tab", METADATA,
           # ...

           Column('created', DateTime(timezone=True), default=datetime.now)
           )
Run Code Online (Sandbox Code Playgroud)

现在我尝试插入一个新行。我收到了这条消息:

(psycopg2.ProgrammingError) column "created" is of type time with time zone but expression is of type timestamp without time zone
Run Code Online (Sandbox Code Playgroud)

有人知道我必须做什么吗?

谢谢!

ben*_*nvc 5

主要问题似乎是您将 SQLALchemyDateTime列映射到 PostgreSQLtime with time zone列。你应该调查一下Time

如果您打算使用 PostgreSQLtimestamp 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())
    )
Run Code Online (Sandbox Code Playgroud)