2017-09-26 101 views
0

当运行在我的瓶的应用程序的Postgres数据库迁移我得到一个枚举类型以下psycopg2错误:psycopg2.ProgrammingError对瓶(数据库)数据库迁移枚举类型

INFO [alembic.runtime.migration] Context impl PostgresqlImpl. 
INFO [alembic.runtime.migration] Will assume transactional DDL. 
INFO [alembic.runtime.migration] Running upgrade -> 8753d3c9dbd1, empty message 
Traceback (most recent call last): 
    File "/home/jul/.miniconda3/envs/audiolabeling/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context 
    context) 
    File "/home/jul/.miniconda3/envs/audiolabeling/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 470, in do_execute 
    cursor.execute(statement, parameters) 
psycopg2.ProgrammingError: type "feedbacktype" already exists 

我试图删除alembic_version表和迁移文件夹并重新运行flask db init/migrate/upgrade,但没有成功。我不得不放弃数据库来解决这个问题。

有什么方法可以在已经存在的情况下不重新创建类型?

models.py

from audiolabeling import db 
import enum 


class FeedBackType(enum.Enum): 
    NONE = "none" 
    HIDDENIMAGE = "hiddenImage" 

class Task(db.Model): 

    id = db.Column(db.Integer, primary_key=True) 
    feedback = db.Column(db.Enum(FeedBackType)) 

    def __repr__(self): 
     return '<id {}>'.format(self.id) 

回答

0

您可以使用feedback = db.Column(db.Enum(["NONE", "HIDDENIMAGE"]))来代替你的代码。

+0

如果我想在几个表中使用这个枚举怎么办? – jul

+0

您可以定义一个由构成枚举类型的值组成的列表。并将其解压缩到您想要定义枚举类型字段的位置。 – stamaimer