我正在尝试在我的应用程序中设置基于角色权限的授权。我的许多表格之一(角色,权限,用户等)的模型如下所示
class UserRole(Model):
__tablename__ = 'user_role'
id = Column(String(36), primary_key=True, default=_generate_unique_business_id)
user_id = Column(String(36), ForeignKey('user.id'), nullable=False)
role_id = Column(String(36), ForeignKey('role.id'), nullable=False)
created_on = Column(DateTime, default=_get_date_time)
modified_on = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))
deleted_on = Column(DateTime)
__table_args__ = (UniqueConstraint('user_id', 'role_id', name='_user_role_uc'),)
注意 - 我的表格中的主键是Strings
,因为我将UUIDs
放在那里。
现在我的授权已准备就绪,我想让它向后兼容。为此,我想使用role_permission
和user
表填充role
表中的行。所以我决定手动运行insert
查询。
INSERT INTO user_role (id, user_id, role_id, created_on) SELECT uuid(), user.id, 'e5d7454f-a58b-4a0d-acae-074890dadb84', now() FROM user;
但我收到错误
Error Code: 1062. Duplicate entry '604fdff9-a402-11e5-b430-28d24442d3e7-e5d7454f-a58b-4a0d-acae-074' for key '_user_role_uc'
理想情况下,这不应该发生。
当我比较这个唯一约束的预期和实际大小时,我发现了
expected = size of user id + size of role id
= '604fdff9-a402-11e5-b430-28d24442d3e7' + '-' + 'e5d7454f-a58b-4a0d-acae-074890dadb84'
= 36+36 = 72
actual = size of '604fdff9-a402-11e5-b430-28d24442d3e7-e5d7454f-a58b-4a0d-acae-074' = 64
为什么会出现差异?唯一约束的默认大小是64个字节/字节吗?即使这是什么问题?如何修改?我看了sqlalchemy-doc,但没找到方法。
除了这种差异,我无法想到任何其他原因。请帮忙。