当前位置: 首页 > 工具软件 > peewee > 使用案例 >

peewee

慕容劲
2023-12-01

使用peewee 外键遇到的一个问题

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'     # 这里修改为小写的表名即可
 类似资料:

相关阅读

相关文章

相关问答