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?
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
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. –