migrasi
inisialisasi basis data
Harap dicatat bahwa semua contoh mengasumsikan bahwa Anda sudah memiliki database.
Jika ini bukan masalahnya dan Anda perlu membuat tabel, maka ini sangat sederhana karena Ormar menggunakan sqlalchemy untuk membangun tabel di bawahnya.
Yang harus Anda lakukan adalah membuat panggilan\ _ semua () seperti pada contoh berikut.
| meter persegi import
# dapatkan url database Anda dalam format sqlalchemy - sama seperti yang digunakan dengan instance database yang digunakan dalam definisi Model
Mesin = sqlalchemy.create _ engine ("sqlite: / / test.db")
# perhatikan bahwa ini harus menjadi metadata yang sama yang digunakan dalam definisi Model ormar
buat _ semua (mesin)
|
Anda juga dapat membuat tabel individu, yang diekspos di ormar.ormar\ _ objek konfigurasi.
| meter persegi import
# dapatkan url database Anda dalam format sqlalchemy - sama seperti yang digunakan dengan instance database yang digunakan dalam definisi Model
Mesin = sqlalchemy.create _ engine ("sqlite: / / test.db")
# Artis adalah model ormar dari contoh sebelumnya
Artist.ormar _ konfigurasi table.create (mesin)
|
!!!Peringatan: Anda hanya perlu membuat tabel sekali, jadi gunakan konsol Python atau hapus skrip dari kode produksi Anda setelah digunakan pertama kali.
Penggunaan penyuling
Seperti tabel, karena kami memigrasikan tabel berdasarkan sqlalchemy, gunakan alembic.
inisialisasi
Reproduksi contoh minimalis ini menggunakan baris perintah.
| Alembic dalam alembic
Revisi alembik --autogenerasi -m "membuat beberapa perubahan"
Kepala peningkatan alembik
|
Contoh env.py
Contoh sederhana dari migrasi diam harus mirip dengan:
Ketika aplikasi Anda disusun sebagai berikut:
| - > aplikasi
- > alembic (folder yang diinisialisasi - jadi jalankan alembic init alembic di dalam folder aplikasi)
- > model (ini modelnya)
- > _ _ init _ _
- > my_models.py
|
File env.py Anda (dalam folder alembic) mungkin terlihat seperti:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 | Dari logging.config serat imporConfig
Dari sqlalchemy import create _ engine
Dari konteks impor alembik
Sistem impor, os
# tambahkan folder aplikasi ke jalur sistem (alternatif menjalankannya dari folder induk dengan python -m...)
myPath = os.path.dirname (os.path.abspath (_ _ file _ _))
Sys.path.insert (0, myPath + '/.. /.. /')
# ini adalah objek Alembic Config, yang menyediakan
# akses ke nilai-nilai dalam file .ini yang digunakan.
Konteks = kontekstut.config
# Interpret file konfigurasi untuk Python logging.
# Baris ini mengatur penebang pada dasarnya.
FileConfig (config. config _ file _ name)
# tambahkan objek MetaData model kamu di sini (yang digunakan di ormar)
# dukungan untuk 'autogenerasi'
Dari model app.import metadata my _ model
target _ metadata = metadata
# atur url Anda di sini atau impor dari pengaturan
# perhatikan bahwa secara default url disimpan sqlachemy.url variabel dalam alembic.ini file
URL = "sqlite: / / test.db"
Def run _ migrations _ offline ():
"" Jalankan migrasi dalam mode 'offline'.
Ini mengonfigurasi konteks hanya dengan URL
Dan bukan Mesin, meskipun Mesin dapat diterima
Di sini sebagai well.By melewatkan penciptaan mesin
Kami bahkan tidak membutuhkan DBAPI untuk tersedia.
Panggilan untuk mengkontekstuk. mengeksekusi () di sini memancarkan string yang diberikan kepada
Output skrip.
"""
Konteks .konfigurasi (
URL = URL,
target _ metadata = target _ metadata,
literal _ binds = Benar,
dialek _ opts ={"paramstyle": "named"},
# jika Anda menggunakan set lapangan UUID juga param ini
# awalan harus cocok dengan nama impor sqlalchemy dalam alembic
# yang dapat diatur dengan sqlalchemy _ module _ opsi awalan (default 'sa.')
user _ module _ prefix = 'sa.'
)
Dengan konteks. mulai _ transaksi ():
Konteks. lari _ migrasi ()
Def run _ migrasi _ online ():
"" Jalankan migrasi dalam mode 'online'.
Dalam skenario ini kita perlu membuat Mesin
Dan kaitkan hubungan dengan konteksnya.
"""
Connectable = buat _ engine (URL)
Dengan connectable.connect () sebagai koneksi:
Konteks .konfigurasi (
connection=connection,
target _ metadata = target _ metadata,
# jika Anda menggunakan set lapangan UUID juga param ini
# awalan harus cocok dengan nama impor sqlalchemy dalam alembic
# yang dapat diatur dengan sqlalchemy _ module _ opsi awalan (default 'sa.')
user _ module _ prefix = 'sa.'
)
Dengan konteks. mulai _ transaksi ():
Konteks. lari _ migrasi ()
Jika konteksnya adalah _ offline _ mode ():
lari _ migrasi _ offline ()
Lainnya:
menjalankan _ migrasi _ online ()
|
bentuk pengecualian
Anda juga dapat menyertakan / mengecualikan tabel tertentu menggunakan argumen objek termasuk\ _ yang diteruskan ke kontekstu.konfigurure. Ini harus menjadi fungsi yang mengembalikan Benar / Salah untuk objek tertentu.
Fungsi contoh tidak termasuk tabel yang namanya dimulai dengan data\ _, kecuali "data\ _ jobs":
| Def meliputi _ objek (objek, nama, tipe _, tercermin, bandingkan _ dengan):
Jika nama dan nama.startswith ('data _') dan nama tidak ada di ['data _ jobs']:
Kembali Salah
Pengembalian Benar
|
!!!Catatan yang menyertakan\ _ argumen fungsi objek (Anda dapat mengubah nama) diperlukan dan didefinisikan dalam alembik untuk memeriksa apa yang mereka lakukan, periksa dokumentasi alembik
Kemudian sebarkan ke dalam konteks (online dan offline):
| Konteks .konfigurasi (
URL = URL,
target _ metadata = target _ metadata,
literal _ binds = Benar,
dialek _ opts ={"paramstyle": "named"},
user _ module _ prefix = 'sa.',
termasuk _ objek = termasuk _ objek
)
|
!!!Info Anda dapat membaca lebih lanjut tentang pembuatan tabel, perubahan, dan migrasi dalam dokumentasi pembuatan tabel SQL Alchemy.