Flask-SQLAlchemy dan Alembic: Amalan terbaik untuk memindahkan pangkalan data dalam aplikasi web Python (Bahagian 2)
Dalam artikel sebelumnya, kami membincangkan cara Flask-SQLAlchemy dan Alembic berfungsi bersama . Artikel ini terutamanya akan memperkenalkan cara menambah dan mengalih keluar lajur dalam beberapa model data asas dan mengubah suai jenis atau kekangan beberapa lajur. Perubahan ini sangat biasa semasa pembangunan projek sebenar.
Menambah dan Mengalih Keluar Lajur
Apabila menggunakan Flask-SQLAlchemy dan Alembic untuk pemindahan pangkalan data, menambah dan mengalih keluar lajur jadual adalah sangat biasa. Untuk menunjukkan proses ini, kami akan menambah beberapa lajur baharu pada contoh model Orang berikut.
from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() class Person(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(255), nullable=False) age = db.Column(db.Integer) def __repr__(self): return '<Person %r>' % self.name
Andaikan kita ingin menambah dua lajur baharu, satu ialah tarikh lahir (tarikh lahir) dan lajur Boolean yang menunjukkan sama ada orang itu sudah berkahwin (berkahwin). Kita boleh menggunakan arahan berikut untuk menjana skrip pemindahan:
$ alembic revision -m "add birthdate, is_married columns to person"
Seterusnya, kita perlu mengubah suai fail skrip migrasi .py yang dijana untuk menambah lajur baharu. Kita boleh menggunakan add_column() dalam fungsi upgrade().
from alembic import op import sqlalchemy as sa def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.add_column('person', sa.Column('birthdate', sa.Date(), nullable=True)) op.add_column('person', sa.Column('is_married', sa.Boolean(), nullable=True)) # ### end Alembic commands ###
Untuk memadamkan lajur, kita boleh menggunakan fungsi drop_column() dalam destructor degrade() yang sepadan untuk memadamkan lajur daripada model pangkalan data.
def downgrade(): # ### commands auto generated by Alembic - please adjust! ### op.drop_column('person', 'birthdate') op.drop_column('person', 'is_married') # ### end Alembic commands ###
Kod contoh lengkap untuk skrip pemindahan ini boleh didapati di bawah.
"""add birthdate, is_married columns to person""" from alembic import op import sqlalchemy as sa # revision identifiers, used by Alembic. revision = 'eab2c4f1c9fb' down_revision = '7cfae59c2402' branch_labels = None depends_on = None def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.add_column('person', sa.Column('birthdate', sa.Date(), nullable=True)) op.add_column('person', sa.Column('is_married', sa.Boolean(), nullable=True)) # ### end Alembic commands ### def downgrade(): # ### commands auto generated by Alembic - please adjust! ### op.drop_column('person', 'birthdate') op.drop_column('person', 'is_married') # ### end Alembic commands ###
Perubahan jenis lajur dan pengubahsuaian kekangan
Dalam banyak kes, kita perlu mengubah suai jenis lajur dan kekangan. Katakan kita ingin menukar jenis lajur umur model Orang daripada INTEGER kepada SMALLINT. Kita boleh menggunakan fungsi alter_column() dalam fail skrip migrasi .py yang dihasilkan untuk mencapai ini.
def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.alter_column('person', 'age', existing_type=sa.Integer(), type_=sa.SmallInteger(), nullable=True) # ### end Alembic commands ###
Kami juga boleh mengubah suai kekangan pada lajur. Memeriksa model Person, kami mendapati bahawa tiada kekangan nilai unik dalam model. Kita boleh menambah kekangan nilai unik untuk lajur nama dan tarikh lahir menggunakan kod berikut.
from alembic import op import sqlalchemy as sa def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.create_unique_constraint(op.f('uq_person_name'), 'person', ['name']) op.create_unique_constraint(op.f('uq_person_birthdate'), 'person', ['birthdate']) # ### end Alembic commands ###
Jika kita perlu membatalkan kekangan nilai unik kemudian, kita boleh menggunakan fungsi drop_constraint(). Contohnya:
def downgrade(): # ### commands auto generated by Alembic - please adjust! ### op.drop_constraint(op.f('uq_person_name'), 'person', type_='unique') op.drop_constraint(op.f('uq_person_birthdate'), 'person', type_='unique') # ### end Alembic commands ###
Artikel ini menerangkan beberapa jenis perubahan skema pangkalan data yang biasa, seperti menambah dan mengalih keluar lajur, menukar kekangan lajur dan menukar jenis data lajur. Ia menunjukkan amalan terbaik untuk pemindahan pangkalan data menggunakan Flask-SQLAlchemy dan Alembic. Ini akan membantu anda mengurus skema pangkalan data anda dengan lebih cekap dan berkongsi fail migrasi dengan lebih mudah dalam persekitaran pasukan.
Pautan rujukan:
Atas ialah kandungan terperinci Flask-SQLAlchemy dan Alembic: Amalan terbaik untuk memindahkan pangkalan data dalam aplikasi web Python (Bahagian 2). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!