2015-03-29 1 views
3

У меня есть модель КОЛБУ:Ошибка при переносе в термос с sqlalchemy_utils ChoiceType

class User(db.Model): 
    ROLE_USER = 0 
    ROLE_MODERATOR = 1 
    ROLE_ADMIN = 2 
    ROLES = [ 
     (ROLE_USER, u'Regular user'), 
     (ROLE_MODERATOR, u'Moderator'), 
     (ROLE_ADMIN, u'Admin') 
    ] 

    id = db.Column(db.Integer, primary_key = True) 
    login = db.Column(db.String(32), nullable=False, unique=True) 
    first_name = db.Column(db.String(32)) 
    last_name = db.Column(db.String(32)) 
    role = db.Column(ChoiceType(ROLES), nullable=False) 

И я создал миграцию с колба-эмигрировать (дб Postgresql):

def upgrade(): 
    ### commands auto generated by Alembic - please adjust! ### 
    op.create_table('user', 
    sa.Column('id', sa.Integer(), nullable=False), 
    sa.Column('login', sa.String(length=32), nullable=False), 
    sa.Column('first_name', sa.String(length=32), nullable=True), 
    sa.Column('last_name', sa.String(length=32), nullable=True), 
    sa.Column('role', sqlalchemy_utils.types.choice.ChoiceType(length=255), nullable=False), 
    sa.PrimaryKeyConstraint('id'), 
    sa.UniqueConstraint('login') 
    ) 

Миграция была созданный успешно, но когда я хочу обновиться, эта ошибка увеличивается:

TypeError: <flask_script.commands.Command object at 0x7fada1e973d0>: __init__() got an unexpected keyword argument 'length' 

Может кто-нибудь объяснить проблему ?

ответ

5

Как говорит ошибка, ChoiceType не имеют INIT аргумент называется length:

http://sqlalchemy-utils.readthedocs.org/en/latest/data_types.html#module-sqlalchemy_utils.types.choice

Вы можете удалить его и использовать

sqlalchemy_utils.types.choice.ChoiceType(User.ROLES) 

вместо этого.

+0

Благодарим вас, вы правы. –

+0

Если в вашей миграции много сломанных полей ChoiceType, вам не нужно указывать фактический выбор (alembic/postgres не заботится о них), вы можете просто выполнить большой поиск и заменить, и пройти в фиктивном списке с одной кортежной парой для всех разных полей. Например, в vi, do: ':% s/ChoiceType (length = 255)/ChoiceType ([('', '')]) /' – Jaza

 Смежные вопросы

  • Нет связанных вопросов^_^