2015-09-26 22 views
5
benim veritabanını güncellemek için Flask-Geçirme (Alembic) kullanıyorum

. models.py dosyamı güncelledim ancak hata yaptım. Yaptığım Negöç ​​veya Flask-Taşıyın (Alembic) ile veritabanı Geçiş yapamıyor

sqlalchemy.exc.IntegrityError: (_mysql_exceptions.IntegrityError) (1215, 'Cannot add foreign key constraint') [SQL: u'\nCREATE TABLE topics (\n\tid INTEGER NOT NULL AUTO_INCREMENT, \n\t`subjectID` INTEGER, \n\ttopic VARCHAR(150) NOT NULL, \n\tPRIMARY KEY (id), \n\tFOREIGN KEY(`subjectID`) REFERENCES subjects (id)\n)\n\n'] 

yabancı anahtar için db.Text yerine db.Integer sahip oldu: Ben ancak bu hata var, bir göç koştu ve veritabanını yükseltmek için gitti. Şimdi takıldım Yani

alembic.util.CommandError: Target database is not up to date. 

: Yeni bir taşıma işlemi gerçekleştirdikten denediğinizde

Ben bu olsun. Veritabanını yükseltemiyorum veya bir geçiş yapamıyorum. Böyle bir şey ile önceki veritabanı sürüme geçin çalıştı:

python manage.py db downgrade --sql b877018671c:36949b1cca31 

Ama python manage.py db current çalıştırdığınızda ben de şaşırıp en yeni veritabanı sürümü almak

bir düzeltme bunun için var mı.? Teşekkürler.

+0

Henüz çalıştırmadığınız bir geçişiniz (kötü olan) varmış gibi geliyor. Düzeltmek veya silmek ve geçişi yeniden oluşturmak için onu düzenleyin. – dirn

+0

Bir geçişi nasıl silerim? –

+0

Geçişler sadece dosyalardır. Sadece dosyayı silmeniz gerekiyor. Flask-Migrate genellikle bunları "göçler/sürüm" içinde saklar. – dirn

cevap

10

Alembic saklar alembic_version denilen oluşturur tablodaki db sürümü. Bu tablo tek bir alan ve satır alembic_version.version_num içerir. Bunun değerinin, en son dosyanın dosya adıyla eşleştiğinden emin olun. migrations/version. Bu sürüm numarası, genellikle dosyanın satır 26'sında görüntülenen revision değişkenindeki düzeltme dosyasında bulunur. Db sürümüyle eşleştiğinden emin olun.

bir diğer seçenek, db bırakın ve alembic kullanarak yeniden oluşturmaktır. Bu, verilerin önemli olmadığı bir geliştirme ortamıysa, bu benim tavsiyem olur. Kabul cevap gibi hissediyorum

+0

I aynı sorunu vardı ve çözüm çalıştı yukarı Hedef veritabanı değil 'almak yönetmek ama ben bir konuda kafam karıştı. Aslında, aynı göç komutunu yanlışlıkla iki kez çalıştırıyorum, bu nedenle geçişler/sürümler klasöründe iki aynı geçişler oluşturuldu, birincisi benim modelimdeki değişiklikleri yansıttı, birincisi boştu. Bu konuyu bunun yüzünden aldığımı mı düşünüyorsun? Çünkü alembic_version öğesini işaretlediğimde, sayı ilk geçişle eşleşti ancak ikinci – Humoyun

+0

değil. Soruna neden olmamalı çünkü ikinci geçiş komut dosyasını açarsanız aslında hiçbir şey yapmaz. Eğer OKB'siyseniz (benim gibi), ihtiyaç duyulmayan ikinci taşıma dosyasını silebilirsiniz. Sadece 'alembic_version.version_num' değerinin ilk (doğru) geçiş komut dosyasının dosya adıyla eşleştiğinden emin olun. –

4

biraz fazla karışık. Aynı sorunu yaşadım ve çözdüğüm yol, kodlama hatalarını içeren geçişi silmekti. Yine de, yanlış kodlanmış olduğundan, buna ihtiyacınız yok. En son geçişi migrations/versions klasöründe bulun, silin, ardından taşımanızı tekrar çalıştırın ve yeni sürüme geçirin. Veritabanınızdaki verileri yalnızca taşımak için silmeniz gerekmez.

+0

tam olarak ne yaptım :) – danidee

İlgili konular