2014-06-22 18 views
0

我试图使用peewee的迁移模块将我的page表中的列从name重命名为title。不过我跑这个令人困惑的错误:peewee迁移“没有列名FOREIGN”

peewee.OperationalError: table page__tmp__ has no column named FOREIGN 

我的猜测是,它是与需要使用SQLite时创建的中介表。


当前型号:

完整的源在这里https://github.com/csytan/textmug/blob/master/db.py

class User(BaseModel): 
    id = peewee.CharField(primary_key=True, max_length=20) 

class Page(BaseModel): 
    id = peewee.PrimaryKeyField() 
    name = peewee.TextField(unique=True, null=True) 
    user = peewee.ForeignKeyField(User, null=True, related_name='pages') 

迁移脚本:

from playhouse import migrate 

my_db = migrate.SqliteDatabase('database') 
migrator = migrate.SqliteMigrator(my_db) 

with my_db.transaction(): 
    migrate.migrate(
     migrator.rename_column('page', 'name', 'title') 
    ) 
+1

看起来像在迁移代码中的错误...我会看看,谢谢! https://github.com/coleifer/peewee/issues/380 – coleifer

+0

这个错误已被修复,以防有人在这个问题上漫游。 – coleifer

回答

0

我最后只是手动W¯¯ ith sqlite3命令行工具:

BEGIN; 

ALTER TABLE "page" RENAME TO "page_tmp"; 

CREATE TABLE "page" ("id" INTEGER NOT NULL PRIMARY KEY, "title" TEXT, "user_id" TEXT, "created" DATETIME NOT NULL, "text" TEXT NOT NULL, "public" SMALLINT NOT NULL, "encrypted" SMALLINT NOT NULL, FOREIGN KEY ("user_id") REFERENCES "user" ("id")); 

INSERT INTO "page" SELECT "id","name","user_id","created","text","public","encrypted" FROM "page_tmp"; 

DROP TABLE "page_tmp"; 

COMMIT; 
相关问题