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

原文  https://mozillazg.com/2016/01/sqlalchemy-use-postgresql-uuid.html
主题 PostgreSQL SQLAlchemy

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

from sqlalchemy.dialects.postgresql import UUID

id = Column(UUID)

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

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

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

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

from postgreql import text

id = 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

你可能感兴趣的:(Python,postgresql)