2016-09-20 70 views
2

我有以下代码PeeWee ORM报告说表已经存在

db = peewee.SqliteDatabase(":memory:") 

class CategoryProduct(peewee.Model): 
    category_code = peewee.CharField() 
    product_code  = peewee.CharField() 
    product_order = peewee.CharField() 
    default_category = peewee.CharField() 

    def __str__(self): 
     return "({0}, {1})".format(self.category_code, self.product_code) 

db.connect() 
db.create_tables([CategoryProduct]) 

当我运行该脚本,我得到

('CREATE TABLE "categoryproduct" ("id" INTEGER NOT NULL PRIMARY KEY, "category_code" VARCHAR(255) NOT NULL, "product_code" VARCHAR(255) NOT NULL, "product_order" VARCHAR(255) NOT NULL, "default_category" VARCHAR(255) NOT NULL)', []) 
Traceback (most recent call last): 
    File "/Users/daniels/Work/sandbox/venv/lib/python3.5/site-packages/peewee.py", line 3676, in execute_sql 
    cursor.execute(sql, params or()) 
sqlite3.OperationalError: table "categoryproduct" already exists 

任何想法是怎么回事?如果我创建任何其他模块它工作正常,但不知何故它不喜欢这个名字。

回答

2

的文档有一张纸条给你:

注: 记住要指定在模型类的数据库,否则peewee会回落到一个名为“peewee.db”一个默认的SQLite数据库。

只需将数据库添加到您的类

class BaseModel(peewee.Model): 
    class Meta: 
     database = db 



class CategoryProduct(BaseModel): 
    category_code = peewee.CharField() 
    product_code  = peewee.CharField() 
    product_order = peewee.CharField() 
    default_category = peewee.CharField() 

    def __str__(self): 
     return "({0}, {1})".format(self.category_code, self.product_code) 
+0

噢,伙计...的复制和粘贴的问题...忘了还复制了“类元” ......我真希望启用调试模式也将显示每个模型试图使用的数据库。本来更容易调试。 – daniels