Flask için geçişleri işlemek için Alembic kullanıyorum. alembic revision --autogenerate
, teoride, veritabanımdaki değişikliklere dayanan bir geçişi otomatikleştirmelidir. Bununla birlikte, Alembic basitçe yukarıdaki komutla boş bir göç yaratıyor.Alembic autogenerates boş Flask-SQLAlchemy geçişleri
question very similar to this one numaralı belgede, sorun doğru modellerin içe aktarılmadığıydu. env.py
gösterildiği gibi Ancak, benim Matara uygulamasından modellerini ithal var:
...
# import settings from Flask
alembic_config = config.get_section(config.config_ini_section)
from start import app
from models import User, Item, Recipient # models are imported here from models.py
alembic_config['sqlalchemy.url'] = app.config['SQLALCHEMY_DATABASE_URI']
engine = engine_from_config(
alembic_config, # config.get_section(config.config_ini_section)
prefix='sqlalchemy.',
poolclass=pool.NullPool)
...
yanı sıra env.py
ithal db meta verileri ('start' benim Matara Uygulamanın ana dosyanın adıdır)
"""initial_rev
Revision ID: 45296fd29540
Revises: None
Create Date: 2013-06-19 17:32:38.392268
"""
# revision identifiers, used by Alembic.
revision = '45296fd29540'
down_revision = None
from alembic import op
import sqlalchemy as sa
def upgrade():
### commands auto generated by Alembic - please adjust! ###
pass
### end Alembic commands ###
def downgrade():
### commands auto generated by Alembic - please adjust! ###
pass
### end Alembic commands ###
Edit
0: my Matara uygulaması aynı fikirde olsa daalembic revision --autogenerate -m "initial_rev"
Running
...
from start import db
target_metadata = db.metadata
...
sonra, boş bir göç üretir
Here is a gist, uygulamanızın dosya yapısını ve bazı ek kodları gösterir. Sorun şu ki, Alembic, __init__.py
numaralı telefondan ilk kez başlatılmadan database.py
'dan alınan db'ye sahip olmayı sevmiyor. Bununla birlikte, bu SO cevabında açıklanan (döngüsel içe aktarma nedeniyle) planları kullanıldığında bu mümkün değildir: https://stackoverflow.com/a/9695045/353878.
Soru şu ki, Flask planları kullanıldığında Alembic nasıl kullanılabilir?
ben bile emin veritabanı meta doğru ithal ediliyordu yapmak, db.metadata.sorted_tables
baskı çalıştı 2
Düzenleme #. Tabii ki, tüm veritabanı şeması terminale bağlandı. Peki neden Alembic boş yükseltme/indirme işlevlerini üretiyor?
Düzenleme 3.
Sorunun db.init_app(app)
ve db = SQLAlchemy(app)
farklılıklarını bir ilgisi vardır sonucuna oldum ama soruna neden ne olduğundan emin değilim. Bu teoriyi test etmek için db = SQLAlchemy(app)
olmak üzere from database import db
'u env.py
olarak değiştirdim. Muhtemelen kötü bir fikir, ama hata ayıklama amaçları için neler olacağını görmek istedim.
Alembic otomatik olarak yükseltilir ve tersine çevrildiklerinde yükseltme() ve downgrade() yöntemleri doldurulur! upgrade()
, tablolarımın her üçünü de düşürürken, downgrade()
bunları tüm uygun sütunlar ve meta verilerle oluşturdu. Bunun neden olduğu hakkında hiçbir fikrim yok ama umarım bu problemi çözmeye çalışan insanlar için faydalıdır.
Şemanınız "alembic revision --autogenerate" çalıştırdığınızda nasıl değişti? – drewman
Birkaç sütunlu üç tablo ekledim. – element119
, "env.py" 'de model almanız ve böylece meta verilere kaydolmanız gerekir. – iElectric