Postgres+SQLAlchemy 使用 default=func.now() 将时间转换为 UTC

作者:编程家 分类: postgresql 时间:2025-06-20

使用 Postgres 数据库和 SQLAlchemy 库,我们可以轻松地将时间转换为 UTC 格式并存储在数据库中。在本文中,我们将介绍如何使用 default=func.now() 和 SQLAlchemy 的其他功能来实现这一目标。

Postgres 数据库和 SQLAlchemy 简介

Postgres 是一个强大且开源的关系型数据库管理系统,它支持广泛的功能和扩展。SQLAlchemy 是一个流行的 Python ORM(对象关系映射)库,它提供了一个高级的 SQL 工具包,用于与不同类型的数据库进行交互。

将时间转换为 UTC

在数据库中存储时间时,通常建议使用 UTC 格式,因为它是一种标准的世界标准时间。而在应用程序中,我们可能更倾向于使用本地时间。为了将本地时间转换为 UTC 格式,我们可以使用 SQLAlchemy 的 default=func.now() 功能。

在 SQLAlchemy 中,func.now() 函数返回当前的数据库服务器时间。将其用作默认值时,每当创建新的数据库记录时,都会自动将当前时间存储为 UTC 时间。

案例代码

下面是一个简单的示例,演示了如何使用 default=func.now() 来将时间转换为 UTC:

python

from sqlalchemy import create_engine, Column, DateTime

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy.sql import func

# 创建数据库连接

engine = create_engine('postgres://username:password@localhost/db_name')

# 创建基础模型类

Base = declarative_base(bind=engine)

# 创建模型类

class MyModel(Base):

__tablename__ = 'my_table'

id = Column(Integer, primary_key=True)

created_at = Column(DateTime, default=func.now())

# 创建表格

Base.metadata.create_all()

# 创建新记录

new_record = MyModel()

session.add(new_record)

session.commit()

在上面的示例中,我们首先创建了一个数据库连接,并使用 create_engine 函数指定了连接字符串。然后,我们定义了一个名为 MyModel 的模型类,并在 created_at 列上使用 default=func.now() 来将时间转换为 UTC。最后,我们使用 session.add() 和 session.commit() 将新记录添加到数据库中。

在本文中,我们介绍了如何使用 Postgres 数据库和 SQLAlchemy 来将时间转换为 UTC 格式并存储在数据库中。通过使用 default=func.now() 和其他 SQLAlchemy 功能,我们可以轻松地实现这一目标。这种方法不仅简单,而且可靠,可以确保在不同的时区和环境中正确地处理时间。