2011-07-19 13 views
7

Pyramid + SQLAlchemy + URL Dispatch Wiki Tutorial'da, uygulama çalıştırıldığında veritabanının ana işlevde başlatıldığını fark ettim. initialize_sql olarak tanımlanırPiramit Django'nun syncdb komutuna eşdeğer mi?

def main(global_config, **settings): 
    """ This function returns a WSGI application. 
    """ 
    engine = engine_from_config(settings, 'sqlalchemy.') 
    initialize_sql(engine) 
    # -- and so on --- 

aşağıdaki gibidir: esasen tüm tabloları oluşturur (bunlar yok ise) ve bazı başlangıç ​​değerleri ile doldurur

def initialize_sql(engine): 
    DBSession.configure(bind=engine) 
    Base.metadata.bind = engine 
    Base.metadata.create_all(engine) 
    try: 
     session = DBSession() 
     page = Page('FrontPage', 'initial data') 
     session.add(page) 
     transaction.commit() 
    except IntegrityError: 
     # already created 
     pass 

. Anlaşılması kolay, ANCAK ...

Bu, küçük bir uygulamayı göstermek için sadece bir öğreticidir, bu nedenle üretimde tipik olarak nasıl yapılacağı farklı olabilir (ya da değil ...). Bu bana şu soruyu getiriyor:

Pyramid'i SQLAlchemy ile kullanırken, veritabanının bu şekilde başlatılması için tipik bir model mi, yoksa Django'da çalıştırılan manage syncdb komutuna eşdeğer bir şey kullanmak normal mi? elle?

cevap

10

Piramit veri modelleri hakkında herhangi bir varsayımda bulunmadığından, bunları sizin için yönetmeye çalışmaz. Bu tamamen size ve kullandığınız belirli veri katmanına bağlıdır.

SQLAlchemy kullanımıyla ilgili olarak, SQLAlchemy-migrate paketini kullanarak geçişleri yönetmek mümkündür. Bunu ayarladığınızda, geçişleri gerçekleştirmek için size bir manage komutu sağlar.

+2

Netleştirmek için: Büyük olasılıkla SQLAlchemy (ki ben de yeniyim) kullanmayı planlıyorum. Piramidin tasarım felsefesini çekici bulurken, tipik olarak nasıl kullanıldığına dair iyi bir örnek bulamadım. Öğretici örneği, db başlatma işlemini gerçekleştirmenin meşru, yaygın bir yoludur mu? Ya da bu sadece bir oyuncak "Merhaba Dünya" sitesi olarak ele alınmalıdır? (Ben bir kare tekerleği syncdb komutunu kendimi yeniden icat etme ihtimalinden kaçınmak için elimden geleni yapıyorum). – kes

+4

Bu, üretim sitelerinde nasıl yapıldığını değil, öğreticiler için de uygundur. Göçler her zaman değişken olan bir şeydir. Django'nun Güney'i var, SQLAlchemy SQLAlchemy-migrate'a sahip ve her zaman ham SQL göç komut dosyalarını da kullanabilirsiniz. Veritabanını başlatma ve taşıma neredeyse projeden projeye veya şirketten şirkete her zaman farklıdır. –