使用 sqlalchemy 时如何配置使用 postgresql 的 uuid 类型

来源:互联网 发布:淘宝3c证书是什么 编辑:程序博客网 时间:2024/06/10 00:34
原文  https://mozillazg.com/2016/01/sqlalchemy-use-postgresql-uuid.html
主题 PostgreSQL SQLAlchemy

在 sqlalchemy 中 postgresql 的 uuid 类型对象是: sqlalchemy.dialects.postgresql.UUID, 所以基本的用法是:

from sqlalchemy.dialects.postgresql import UUIDid = Column(UUID)

下面重点要说的就是如何设置自动生成随机的 uuid。

第一种办法是,使用 python 的 uuid模块生成 uuid:

id = Column(UUID, default=lambda: str(uuid.uuid4()))

第二种办法(推荐)是,服务端去生成 uuid 之 gen_random_uuid():

from postgreql import textid = Column(UUID, server_default=text("gen_random_uuid()"))

gen_random_uuid()并不是默认可用的,需要在数据库中安装 pgcrypto模块(下面的操作在 postgresql 数据库控制台中操作):

# \c db_name# create extension pgcrypto;CREATE EXTENSION# select gen_random_uuid();           gen_random_uuid            -------------------------------------- 52f3e12b-b42a-47df-80de-6bfd9396b87e(1 row)

第三种办法是,服务端去生成 uuid 之 uuid_generate_v4():

id = Column(UUID, server_default=text("uuid_generate_v4()"))

需要在数据库中安装 uuid-ossp模块:

# \c db_name# create extension "uuid-ossp";CREATE EXTENSION# select uuid_generate_v4();           uuid_generate_v4           -------------------------------------- 53153822-8516-45d7-8804-9792439e449a(1 row)

参考资料

  • PostgreSQL — SQLAlchemy 1.1 Documentation
  • Column Insert/Update Defaults — SQLAlchemy 1.1 Documentation
  • How to set a column default to a PostgreSQL function using SQLAlchemy? - Stack Overflow
  • PostgreSQL: Documentation: 9.5: pgcrypto
  • PostgreSQL: Documentation: 9.5: uuid-ossp