from playhouse.flask_utils import FlaskDB
db_wrapper = FlaskDB()
class Role(db_wrapper.Model):
number = CharField(max_length=50,unique = True,null=False)
name = CharField(max_length=50,unique = True,null=False)
class Meta :
table_name = 'role'
class ACL(db_wrapper.Model):
role = ForeignKeyField(Role,field='name', column_name='role',
backref='acls')
class Meta:
table_name = 'ACL'
db_wrapper.database.create_tables([Role,ACL])
第一次执行db_wrapper.database.create_tables([Role,ACL])
的时候,没有错误,第二次执行的时候会报异常Dumplicate key name 'acl_role'
的错误。原因是peewee在判断表是否存在的时候,表名称字段转换为了小写,但是在ACL
这个model的Meta中指定了表名为大写ACL
,所以在执行的时候,会重复去创建表acl
,导致索引名称重复抛出异常。
处理方法:
class ACL(db_wrapper.Model):
role = ForeignKeyField(Role,field='name', column_name='role',
backref='acls')
class Meta:
table_name = 'acl' # 这里修改为小写的表名即可