我正在使用 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', ''
你可以尝试这样的事情:
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 函数作为默认值传递,因此每次实例化模型时都会评估该值。