0

나를 이해하지 못하는 mysql 명령에 다음 오류 typeerror: object() takes no parameters가 표시됩니다. 오류로 인해 나는 더 이상sqlalchemy 오류 : db (model model)에서 열을 삭제 한 후에 object()에 매개 변수 오류가 발생하지 않습니다.

아래 enter image description here

내 models.py 파일에서 사용자 모델의 정의는 필요하지 않습니다 내 models.py에서 사용자 이름 열을 삭제하는 것입니다, 나는 사용자 이름 열을 삭제하고 싶어 내가 모델

class User(db.Model): 
    __tablename__ = 'user' 
    id = db.Column(db.Integer, primary_key=True) 
    username = db.Column(db.String(32), index=True, unique=True) 
    firstname = db.Column(db.String(128)) 
    lastname = db.Column(db.String(128)) 
    email = db.Column(db.String(120), index=True, unique=True) 

에서 제거 위의 오류 다음은 제가 DB를 업데이트하는 데 사용 내 db_migrate.py 파일입니다. 나는이 오류가 열을 제거하기 때문에하지 않은 005_migration.py 파일

from sqlalchemy import * 
from migrate import * 


from migrate.changeset import schema 
pre_meta = MetaData() 
post_meta = MetaData() 
user = Table('user', pre_meta, 
    Column('id', INTEGER(display_width=11), primary_key=True, nullable=False), 
    Column('username', VARCHAR(length=32)), 
    Column('email', VARCHAR(length=120)), 
    Column('password_hash', VARCHAR(length=128)), 
    Column('firstname', VARCHAR(length=128)), 
    Column('lastname', VARCHAR(length=128)), 
) 


def upgrade(migrate_engine): 
    # Upgrade operations go here. Don't create your own engine; bind 
    # migrate_engine to your metadata 
    pre_meta.bind = migrate_engine 
    post_meta.bind = migrate_engine 
    pre_meta.tables['user'].columns['username'].drop() 


def downgrade(migrate_engine): 
    # Operations to reverse the above upgrade go here. 
    pre_meta.bind = migrate_engine 
    post_meta.bind = migrate_engine 
    pre_meta.tables['user'].columns['username'].create() 
+1

을 확인 'alembic' 모듈이 db 마이그레이션을 처리하도록하는 것이 좋습니다. 그걸 시도 했니? –

+0

게다가, 컬럼의 데이터 타입은 ('Integer','String' ...) ... –

+0

의 형태로 생각됩니다. 앞으로는 추적으로 이미지를 삽입하지 마십시오. 추천을 위해 @IronFist에게 감사합니다. –

답변

1

내가 여기, 당신이 열 정의에 대한 잘못된 데이터 유형을 사용하고 생각하는 바로 그들이다 : SQLAlchemy의 열 및 데이터 유형에 대한 자세한 내용은

from sqlalchemy import (MetaData, Table, Column, Integer, String) 

user = Table('user', pre_meta, 
    Column('id', Integer, primary_key=True, nullable=False), 
    Column('username', String(32)), 
    Column('email', String(120)), 
    Column('firstname', String(128)), 
    Column('lastname', String(128)), 
) 

, 내가 생각하는이 link

+0

이지만 005_migration.py의 코드는 sqlalchemy-migrate에 의해 생성됩니다. 내 models.py에서 나는 그것을 SQLAlchemy로 정의했다 .Integer 'id = db.Column (db.Integer, primary_key = True) ' – GucciProgrammer

+0

@GucciProgrammer .. 마이그레이션 스크립트는 여전히 내 이해를 실험적으로하고있다. 데이터 유형과 당신은 마이 그 레이션 준비를해야합니다 .. 그리고 내가 당신에게 제안한 것처럼 ...'Alembic'은 훨씬 낫다 ... –

+0

나는 Alembic을 시험해 보겠습니다. 감사! :) – GucciProgrammer

0

입니다 Miguel's database tutorial

#!flask/bin/python 
import types 
from migrate.versioning import api 
from app import db 
from config import SQLALCHEMY_DATABASE_URI 
from config import SQLALCHEMY_MIGRATE_REPO 
v = api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO) 
migration = SQLALCHEMY_MIGRATE_REPO + ('/versions/%03d_migration.py' % (v+1)) 
tmp_module = types.ModuleType('old_model') 
old_model = api.create_model(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO) 
exec(old_model, tmp_module.__dict__) 
script = api.make_update_script_for_model(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO, tmp_module.meta, db.metadata) 
open(migration, "wt").write(script) 
api.upgrade(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO) 
v = api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO) 
print('New migration saved as ' + migration) 
print('Current database version: ' + str(v)) 

에서이있어,이 라인에서 유래

Column('id', INTEGER(display_width=11), primary_key=True, nullable=False), 

되는 역 추적은 분명히 나타냅니다. 당신이 from sqlalchemy import *로 가져

INTEGER는 같은 display_width로 인수를 취하지 않는다. dialect 특정 데이터 형식 sqlalchemy.dialects.mysql.INTEGER을 사용해야합니다.

+0

하지만 005_migration.py의 코드는 sqlalchemy-migrate에 의해 생성됩니다. 내 models.py에서는 SQLAlchemy.Integer 'id = db.Column (db.Integer, primary_key = True)'로 정의했습니다. 또한'username = db.Column (db.String (32), index = True, unique = True) '행을 유지하면 잘 마이그레이션됩니다. – GucciProgrammer

+0

그러면 DB에서 직접 테이블 정의를 직접 읽음으로써 잘못 생성됩니다 , 그러나 볼 수있는 잘못된 유형을 사용합니다. 도구가 손상되었습니다. [alembic] (http://alembic.zzzcomputing.com/en/latest/)에게도 권하고 싶습니다. "계속 유지"하면 생성 된 마이그레이션은 어떻게 생겼을까요? 마이그레이션 할 변경 사항이 없기 때문에 비어있는 것 같습니다. –