2014-11-11 3 views
0

나는 새로운 테이블을 만들고 bulk_insert을 사용하여 새 항목을 추가하려고합니다.alembic bulk_insert를 사용하여 '프로그래밍 오류, 테이블이 존재하지 않습니다.'

sqlalchemy.exc.ProgrammingError: (ProgrammingError) (1146, u"Table 'partsdb.review_status_definitions' doesn't exist") 'INSERT INTO review_status_definitions (status_order, status_name) VALUES (%s, %s)' ((1, 'New'), (2, 'Reviewed'), (3, 'Design') 

내가 기본 증류기 물건 때문에 작동하는지 알고 그것을 실행하려고 할 때 다음과 같은 오류를 얻을 수

from alembic import op 
import sqlalchemy as sa 
from sqlalchemy.sql import table, column 

def upgrade(): 
    status_reviews = table(
     'status', 
     column('status_order', sa.Integer), 
     column('status_name', sa.String(64)) 
     ) 

    op.bulk_insert(status_reviews, 
     [ 
      {'status_order': 1, 'status_name': 'New'}, 
      {'status_order': 2, 'status_name': 'Reviewed'}, 
      {'status_order': 3, 'status_name': 'Design'}, 
     ] 
    ) 

: 나는 여기에 bulk_insertexample here. 다음 오전은 내가 실행하고 코드입니다 엔트리를주지 않고 다른 테이블을 추가 할 수 있습니다. MySQL Workbench에서 데이터베이스를 확인할 때 status 테이블이 전혀 나타나지 않아 create table 명령에서 실제로 실패한 것으로 생각됩니다.

답변

0

나는 alembic을 사용하여 테이블을 만드는 데 잘못된 구문을 사용하고 있다고 생각합니다. 당신은 당신이 파이썬 코드에서 설정 (그리고 db.create_all()를 통해 생성)이라고하는 방법이다,이 테이블 스키마를 정의하고,하지만 당신은 다른 구문을 사용하여 증류기에서 테이블 생성 :

def upgrade(): 
    op.create_table('categories', 
     sa.Column('id', sa.Integer(), primary_key=True), 
     sa.Column('name', sa.String(length=100), nullable=False), 
     sa.Column('modified', sa.DateTime(), nullable=True), 
     sa.Column('created', sa.DateTime(), nullable=True), 
    ) 
    for category in ["example", "another example"]: 
     op.execute("INSERT INTO categories (name, modified, created) VALUES ('%s', '%s', '%s')" % (category, datetime.utcnow(), datetime.utcnow())) 

을 Alembic은 파이썬에 정의 된 테이블 스키마에서 읽을 수있는 자동 생성 기능을 가지고 있습니다. 데이터베이스와 비교하여 업그레이드 파일을 추출합니다. 지금은 너에게 과잉이라고 생각되지만, 알아두면 좋다.

+0

예를 들어 alembic 및 기타 stackexchange [link] (http://stackoverflow.com/questions/15725859/sqlalchemy-alembic-bulk-insert-fails-str-object-has-no-attribute- autoincre/15769163 # 15769163), sqlalchemy를 사용하여 테이블을 만든 다음, alembic을 사용하여 테이블을 채워야합니다. alembic을 사용하여 생성 된 테이블을 사용하여'bulk_insert'를 시도하면'AttributeError : 'NoneType'객체에 '_autoincrement_column' 오류가 없습니다 – realityinabox