0

私には間違ったmysqlコマンドの次のエラーtypeerror: object() takes no parametersが表示されます。エラーが原因私はもはやsqlalchemyエラー:データベースmodel.pyからカラムを削除した後、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

の形式であると考えています。今後、トレースバックを画像として埋め込まないでください。 –

答えて

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 =真)@GucciProgrammer' – GucciProgrammer

+0

。..としてそれを定義し、手動でそれらを修正しようデータの種類は、あなたは移行する準備ができている必要があります..そして、私はあなたに提案したように... '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/)にもお勧めします。あなたが "行を維持する"場合、生成された移行はどのように見えますか?私はそれが空であると推測するでしょう、移行するための変更がないので。 –

関連する問題