我们能否为Flask模型中的id字段主键设置一个默认的uuid

问题描述 投票:0回答:1

我正在使用 Flask 创建一个动态网站。我可以为模型的 id 字段设置默认值,以便使用 uuid 值自动填充吗?

class User(db.Model, UserMixin):
    id = db.Column(db.String(36), primary_key=True)
    email = db.Column(db.String(150), unique=True, nullable=False)
    password = db.Column(db.String(255), nullable=False)
    first_name = db.Column(db.String(150), nullable=False)
    last_name = db.Column(db.String(150), nullable=False)
    image_file = db.Column(db.String(60), nullable=False, default='default.jpg')
    created_at = db.Column(db.DateTime(timezone=True), server_default=func.now(), nullable=False)
    updated_at = db.Column(db.DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False)

上面给出的是我的用户模型,我已将 id 字段设置为字符串字段而不是默认的整数字段。我可以在此 id 字段中添加一个 uuid 值作为默认值吗?

我尝试将 id 字段的 server_default arg 作为 uuid4 值。

id = db.Column(db.String(36), primary_key=True, server_default=str(uuid.uuid4()))

但是上面的代码为整个列设置了单个 uuid 值。 MySQL数据库中id字段的属性显示如下值:

# Field, Type, Null, Key, Default, Extra
'id', 'varchar(36)', 'NO', 'PRI', 'e3c56759-cc55-46f8-b6d1-d54bd267cf4b', ''
python flask deployment
1个回答
0
投票

你可以尝试这样的事情:

class User(db.Model, UserMixin):
    id = Column(String(36), default=lambda: str(uuid.uuid4()), unique=True)
    email = db.Column(db.String(150), unique=True, nullable=False)
    password = db.Column(db.String(255), nullable=False)
    first_name = db.Column(db.String(150), nullable=False)
    last_name = db.Column(db.String(150), nullable=False)
    image_file = db.Column(db.String(60), nullable=False, default='default.jpg')
    created_at = db.Column(db.DateTime(timezone=True), server_default=func.now(), nullable=False)
    updated_at = db.Column(db.DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False)

这里重要的部分是将 lambda 函数作为默认值传递,因此每次实例化模型时都会评估该值。

© www.soinside.com 2019 - 2024. All rights reserved.