Flask-SQLAlchemy dan Alembic: Amalan terbaik untuk memindahkan pangkalan data dalam aplikasi web Python (Bahagian 2)

PHPz
Lepaskan: 2023-06-17 20:34:38
asal
1321 orang telah melayarinya

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
Salin selepas log masuk

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"
Salin selepas log masuk

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 ###
Salin selepas log masuk

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 ###
Salin selepas log masuk

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 ###
Salin selepas log masuk

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 ###
Salin selepas log masuk

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 ###
Salin selepas log masuk

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 ###
Salin selepas log masuk

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:

  • Flask-SQLAlchemy - https://flask-sqlalchemy.palletsprojects.com/
  • Alembic - https://alembic.sqlalchemy. org/ms/terkini/

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!