2016-03-24 17 views
0

Bir geliştirme ortamında sqlite veritabanıyla iyi çalışan flask-migrate (sürüm 1.8.0) kullanıyorum. Şimdi verilerimizi MySQL'e taşımak ve tüm geçiş geçmişimizi korumak istiyorum (bu yüzden git depomuzda Flask-SQLAlchemy modellerimizle senkronize kalır). Çoklu geliştirme ortamlarında Flask geçişini nasıl kullanabilirim

boş bir MySQL veritabanı oluşturulur ve benim SQLALCHEMY_DATABASE_URI değiştirdikten sonra, koşuyorum çalıştı: Tablo migrate_version düşmesi mümkün değil varlık hakkında hatayla sonuçlandı

python manage.py db upgrade 

. Ben

python manage.py db init 

Şimdi: (. Bu yeni bir veritabanı olduğundan sqlite aslında tabloyu 'alembic_version' değil 'migrate_version' içeriyor olsa Ki, mantıklı) Böylece

, bu yeni veritabanını başlatmak için çalıştı Bir hata: "Dizin taşıma işlemleri zaten var".

Bu klasörü yeniden adlandırabilir ve komutu sorunsuz bir şekilde yeniden çalıştırabilirim, ancak önceki tüm geçişlerimi kaybediyorum. Test ve üretim ortamlarımıza geçiş yaptığımızda da aynı sorunları yaşayacağımızı düşünüyorum.

Flask-Migrate'ın birden çok veritabanı desteğine sahip olduğunu gördüm, ancak tek bir geliştirme ortamında birden çok veritabanını korumak için daha fazla görünüyor. Birden çok geliştirme ortamında Flask-Migrate parça değişikliklerine sahip olmanın bir yolu var mı?

cevap

0

Tablo migrate_version, sqlalchemy-migrate numaralı pakete göre geçişleri izlemek için kullanılır. Flask-Migrate tarafından kullanılan paket olan Alembic, bildiğiniz gibi alembic_version tablosunu kullanır.

Tahminimce, kullanmak istediğiniz bu MySQL veritabanı, daha önce sqlalchemy-migrate kontrolü altındaki bir uygulama tarafından kullanıldı.

MySQL veritabanını silmenizi ve yepyeni bir tane oluşturmanızı öneririz.

+0

Öneriniz için teşekkürler. Veritabanını yeniden oluşturdum, python manage.py db yükseltmesi çalıştırdım ama yine de sqlchemy.exc.ProgrammingError hatası döndürdü: (mysql.connector.errors.ProgrammingError) 1051 (42S02): Bilinmeyen tablo 'sps.migrate_version '[SQL: u' \ nDROP TABLE migrate_version '] ' – AmZar

+0

Veritabanını" bıraktınız "ve önerdiğim gibi tamamen yeni bir tane mi yaptınız? Yorumunuza dayanarak öyle görünmüyor. – Miguel

+0

Yep. Db'yi bıraktım ve yeniden oluşturdum. Ayrıca yeni bir isimle bir şema oluşturmayı denedim. Sqlalchemy-migrate ile ilgili notunuz yine de yardımcı oldu. Ben sqlalchemy-migrate ve flask-migrate yüklü vardı. Eskiyi kaldırdım. Yine de aynı sonuçları aldım. – AmZar

0

SQLite'den MySQL'e geçiş yaptığım ve tüm geçiş geçmişini sürdürdüğüm adımlar. Bunu yapmanın daha iyi bir yolu olduğundan şüpheleniyorum, ama benim için çalıştı.

python manage.py db init -d tmp 

Şimdi Başvur göçü

python maange.py db upgrade -d tmp 

Taşımayı

python manage.py db migrate -d tmp -m "Bring MySQL up to date" 

oluşturma "yeni" göçler için başka bir klasör kullanarak yeni, boş bir veritabanı başlatın yapabilirsiniz "tmp" geçişleri klasörünü silin. Artık buna ihtiyacın yok. HEAD geçişini bulun. arayın 'Rev: your_revision_num (baş)'

python manage.py db show 

Run

update alembic_version set version_num = 'your_revision_num' 

Şimdi MySQL veritabanına karşı bir güncelleme bildirimi MySQL veritabanı şeması eski SQLite şemanıza ve gerektiği sahip olacak tam taşıma geçmişiniz de.