首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中为Postgres自动生成UUID?

如何在Python中为Postgres自动生成UUID?
EN

Stack Overflow用户
提问于 2018-08-29 06:33:52
回答 4查看 11.6K关注 0票数 11

我正在尝试在Postgres db中创建对象。

我正在使用这种方法https://websauna.org/docs/narrative/modelling/models.html#uuid-primary-keys

代码语言:javascript
复制
class Role(Base):
    __tablename__ = 'role'

    # Pass `binary=False` to fallback to CHAR instead of BINARY
    id = sa.Column(UUIDType(binary=False), primary_key=True)

但是当我创建对象时

代码语言:javascript
复制
user_role = Role(name='User')
db.session.add(user_role)
db.session.commit()

我有以下错误:

代码语言:javascript
复制
sqlalchemy.exc.IntegrityError: (psycopg2.IntegrityError) null value in column "id" violates not-null constraint

看起来我没有提供任何ID。那么,我如何让数据库自动生成它或自己生成呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-08-29 14:56:59

您似乎正在使用this code。它缺少该列的默认值。您正在模拟以下SQL:

代码语言:javascript
复制
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()

但是你已经linked to the correct code了。

代码语言:javascript
复制
id = Column(UUID(as_uuid=True),
    primary_key=True,
    server_default=sqlalchemy.text("uuid_generate_v4()"),)

或者,如果不想加载Postgres UUID扩展,可以在Python中创建UUID。

代码语言:javascript
复制
from uuid import uuid4

id = Column(UUID(as_uuid=True),
    primary_key=True,
    default=uuid4,)
票数 23
EN

Stack Overflow用户

发布于 2018-08-29 07:20:48

您可以使用uuid模块,只需设置一个列默认值。例如:

代码语言:javascript
复制
from uuid import uuid4
from sqlalchemy import Column, String

class Role(Base):
    __tablename__ = 'role'

    id = Column(String, primary_key=True, default=uuid4)
票数 5
EN

Stack Overflow用户

发布于 2020-01-24 01:17:44

我真正想说的是:

代码语言:javascript
复制
import uuid

class SomeClass(db.Model):
    __tablename__ = 'someclass'

    id = db.Column(UUID(as_uuid=True),
        primary_key=True, default=lambda: uuid.uuid4().hex)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52067058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档