我正在尝试在Postgres db中创建对象。
我正在使用这种方法https://websauna.org/docs/narrative/modelling/models.html#uuid-primary-keys
class Role(Base):
__tablename__ = 'role'
# Pass `binary=False` to fallback to CHAR instead of BINARY
id = sa.Column(UUIDType(binary=False), primary_key=True)但是当我创建对象时
user_role = Role(name='User')
db.session.add(user_role)
db.session.commit()我有以下错误:
sqlalchemy.exc.IntegrityError: (psycopg2.IntegrityError) null value in column "id" violates not-null constraint看起来我没有提供任何ID。那么,我如何让数据库自动生成它或自己生成呢?
发布于 2018-08-29 14:56:59
您似乎正在使用this code。它缺少该列的默认值。您正在模拟以下SQL:
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()但是你已经linked to the correct code了。
id = Column(UUID(as_uuid=True),
primary_key=True,
server_default=sqlalchemy.text("uuid_generate_v4()"),)或者,如果不想加载Postgres UUID扩展,可以在Python中创建UUID。
from uuid import uuid4
id = Column(UUID(as_uuid=True),
primary_key=True,
default=uuid4,)发布于 2018-08-29 07:20:48
您可以使用uuid模块,只需设置一个列默认值。例如:
from uuid import uuid4
from sqlalchemy import Column, String
class Role(Base):
__tablename__ = 'role'
id = Column(String, primary_key=True, default=uuid4)发布于 2020-01-24 01:17:44
我真正想说的是:
import uuid
class SomeClass(db.Model):
__tablename__ = 'someclass'
id = db.Column(UUID(as_uuid=True),
primary_key=True, default=lambda: uuid.uuid4().hex)https://stackoverflow.com/questions/52067058
复制相似问题