Python2.7.18下peewee3.10.0调用create_table报MySQLDatabase属性错误
报错触发原因
- Peewee 3.x版本对2.x的API做了不兼容调整,
create_table方法不再作为Database类的实例方法存在,直接执行database.create_table(Foo)自然会抛出属性不存在的错误。3.x版本将所有表结构操作的入口统一收敛到Model类本身。 - 代码中单独编写的
mdb.connect(...)属于完全冗余的逻辑:Peewee初始化MySQLDatabase实例时已经封装好了底层MySQL驱动的连接流程,不需要手动再创建一遍原生数据库连接。 - 额外提示:原代码初始化MySQLDatabase实例时没有传入host参数,默认连接地址为localhost,和手动连接时指定的
127.0.0.1在部分网络配置下可能存在连通性差异。
修复方案
将错误的建表调用替换为Model类自带的create_table方法即可,调整后的可运行代码片段:
import MySQLdb as mdb from peewee import * # 删除冗余的原生连接逻辑 # con = mdb.connect(host='127.0.0.1', user=db_user, db=db_name, passwd=db_pass) # 初始化数据库实例时补上host参数 database = MySQLDatabase(db_name, user=db_user, password=db_pass, host='127.0.0.1') class BaseModel(Model): class Meta: database=database class Foo(BaseModel): inputId = CharField(primary_key=True, index=True) inputContent = CharField() database.connect() # 替换原错误的database.create_table(Foo)调用 Foo.create_table()
- 如果需要避免表已存在时的重复建表报错,可以给
create_table加上静默参数:Foo.create_table(fail_silently=True)
内容的提问来源于stack exchange,提问作者kilich
相关产品推荐
相关产品推荐

