You need to enable JavaScript to run this app. Python2.7.18下peewee3.10.0调用create_table报MySQLDatabase属性错误
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.11 14:24:01