2017-09-26 13 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を削除しようとしましたテーブルおよび移行フォルダを削除し、再実行フラスコ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

関連する問題