私はSqlAlchemy/Flaskアプリケーションを持っています。その中には、MyModelA
という名前の既存のモデルがあります。これは次のようになります。DB移行ファイルの列間でデータをコピー/移動できますか?
ここでは、子モデルMyModelB
を追加しています。その後、私はpython manage.py migrate
を実行
class MyModelB(db.Model):
b_id = db.Column(db.Integer, nullable=False, primary_key=True)
a_id = db.Column(db.Integer, db.ForeignKey(MyModelA.a_id), nullable=False)
my_field2 = db.Column(db.String(1024), nullable=True)
:これは、次のようになります。これは、移行ファイルに表示するものである:
def upgrade():
op.create_table('my_model_b',
sa.Column('b_id', sa.Integer(), nullable=False),
sa.Column('a_id', sa.Integer(), nullable=False),
sa.Column('my_field2', sa.String(length=1024), nullable=True),
sa.ForeignKeyConstraint(['a_id'], [u'my_model_a.a_id'],),
sa.PrimaryKeyConstraint('b_id')
)
def downgrade():
op.drop_table('my_table_b')
私はMyModelA
のすべてのインスタンス、インスタンスMyModelB
の子レコードのため、それがMyModelA.my_field1
からMyModelB.my_field2
セットで作成する必要があることなど、この移行を編集したいです。どうしたらいいですか?
アップグレードとダウングレードのコードを示してください。
あなたの移行スクリプト内の任意のデータベースのコードを書くことができ、基本的な制限がyを使用できないことです私たちのORMモデルではなく、SQLAlchemyコアまたはプレーンSQLを使用する必要があります。ここにいくつかの例がある記事があります:https://www.julo.ch/blog/migrating-content-with-alembic/あなたの例では、ダウングレードをアップグレードする必要はありません。 – Miguel
Miguel、ありがとう。 'connection.execute()'関数を使ってレコードを挿入するにはどうしたらいいですか?そこには表示されていません。そして、あなたが今挿入したレコードの主キーをどうやって取得しますか? –
SQLAlchemyのドキュメント:http://docs.sqlalchemy.org/en/latest/core/dml.html – Miguel