2014-07-16 2 views
0

배포의 일부로 일부 데이터를 삽입하려고합니다. 나는 증류기 개정 스크립트를 AttributeError에서플라스크 및 SqlAlchemy - alembic session.add_all() 결과 AttributeError : 'bool'객체에 'clear'오류가 없습니다.

revision = '59891ffc8502' 
down_revision = '349540cf9cef' 

from alembic import op 
import sqlalchemy as sa 
from sqlalchemy.dialects import mysql 
from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy.orm import sessionmaker, relationship 

Session = sessionmaker() 
Base = declarative_base() 

class Colours(Base): 
    __tablename__ = 'colours' 

    id = sa.Column(sa.Integer, primary_key=True) 
    name = sa.Column('name', sa.Unicode(length=25), nullable=False) 
    code = sa.Column('code', sa.Unicode(length=2), nullable=False) 


def upgrade(): 
    bind = op.get_bind() 
    session = Session(bind=bind) 
    session._model_changes = False 

    op.alter_column('colours', 'code', new_column_name='code', existing_type=mysql.VARCHAR(length=25)) 

    col = [ 
      { "name": "Black", "code": "ff00cc" }, 
      { "name": "Blue", "code": "ff00cc" }, 
      { "name": "Brown", "code": "ff00cc" }, 
      { "name": "Gold", "code": "ff00cc" }, 
      { "name": "Green", "code": "ff00cc" } 
    ] 

    # populate colours table 
    colours = { c['name']: Colours(name=unicode(c['name']), code=c['code']) for c in col} 
    session.add_all(colours.values()) 

    session.commit() 
    # ### end Alembic commands ### 

및 업그레이드 머리 결과를 다음 만들었습니다 : '부울'개체가 어떤 속성 '명확한'오류가 없습니다. 실마리가 있습니까?

+0

이전에 사용 했습니까? –

답변

1

밝혀졌습니다. session._model_changes = False은 Flask-SQLAlchemy를 충분히 처리하지 못합니다. 등록한 이벤트 핸들러를 완전히 등록 해제해야합니다.

from flask_sqlalchemy import _SessionSignalEvents 
from sqlalchemy import event 
from sqlalchemy.orm import Session as BaseSession 

Session = sessionmaker() 

event.remove(BaseSession, 'before_commit', _SessionSignalEvents.session_signal_before_commit) 
event.remove(BaseSession, 'after_commit', _SessionSignalEvents.session_signal_after_commit) 
event.remove(BaseSession, 'after_rollback', _SessionSignalEvents.session_signal_after_rollback) 
+0

고마워, 그게 도움이 사실이 코드를 찾았습니다 :) –

관련 문제