2010-04-21 12 views
7

Bir Pylons projem ve şemaya uygun tabloları uygulayan bir SQLAlchemy modelim var:Şema, SQLAlchemy, SQLite ve Postgresql ile nitelikli tablolar mı?

class Hockey(Base): 
    __tablename__ = "hockey" 
    __table_args__ = {'schema':'winter'} 
    hockey_id = sa.Column(sa.types.Integer, sa.Sequence('score_id_seq', optional=True), primary_key=True) 
    baseball_id = sa.Column(sa.types.Integer, sa.ForeignKey('summer.baseball.baseball_id')) 

Bu kod Postgresql ile mükemmel çalışır ancak SQLite'yi masaüstünde ve yabancı anahtar adlarını kullanırken başarısız olur (SQLite'nin şema desteği eksikliğinden dolayı)

sqlalchemy.exc.OperationalError: (OperationalError) bilinmeyen veritabanı "kış" 'PRAGMA "kış" .table_info ("hokey")'()

dev ve test için SQLite kullanmaya devam etmek istiyorum.

Bu başarısızlığı SQLite üzerinde incelikle çözmenin bir yolu var mı?

+2

Devrelerinizde ve test makinelerinizde Postgres ile yaşadığınız zorluklar nelerdir? –

+4

Kurulumunuzu basitleştiririm.Postgres'i uçtan uca kullanın. SQLIte üzerinde test yapmayın ve Postgres'de serbest bırakmayın. – Kuberchaun

+1

SQLite ile yapıştırma, özellikle QA üyeleri için, testlerinin farkında olmak zorunda olmadıklarından daha kolay bir iş akışı sağlar. Sadece Postgres ile gidiyoruz her yerde sağlam bir "B" planı var –

cevap

11

I'd like to continue using SQLite for dev and testing.

Is there a way of have this fail gracefully on SQLite?

Bu tür bir soruyu nereden başlayacağını bilmek zor. Yani . . .

Durdurun. Sadece dur.

Hedef platformlarında geliştirme lüksüne sahip olmayan geliştiriciler var. Onların hayatları zor bir tek-hareket eden kod (ve bazen derleyiciler) bir ortamdan diğerine, iki kez hata ayıklama (bazen hedef platformda uzaktan hata ayıklamak zorundadır), yavaş yavaş kendi bağırsaklarında kemirmenin olduğu bir farkındalık haline geliyor. ülserin başlangıcı.

PostgreSQL'i yükleyin.

Eğer geliştirme, test ve dağıtım için aynı veritabanı ortamını kullanabilirsiniz zaman, gerektiği.

QA ekibinden söz edilmez. Neden yeryüzünde gemi yapmayacaklarını test ediyorlar? PostgreSQL üzerinde çalışıyorsanız, PostgreSQL üzerinde çalışmanızın kalitesini temin edin.

Cidden.

Beraber tablosu ve ilişkili sınıf birleştirerek fark ...

+0

Düzenlemem yeni bir yanıt olarak karşımıza çıktı. Bu cevap tam metnime sahip. Diğeri, QA'daki tüm iyi insanlar için göze çarpan endişem eksik. –

+0

Herkesin geliştirme ve test için erişebileceği bir sunucu varsa, PostgreSQL tüm makinelerde yerel yerine orada kurulabilir. Bu, test cihazlarının yükünü kurması gerekmeyeceği için kolaylaştıracaktır. – jpmc26

2

Ben sadece bir acemi kendim değilim, ben pilonlar kullanmadıysanız, ancak. Onları ayırırsan nasıl olur?

import sqlalchemy as sa 
meta = sa.MetaData('sqlite:///tutorial.sqlite') 
schema = None 
hockey_table = sa.Table('hockey', meta, 
         sa.Column('score_id', sa.types.Integer, sa.Sequence('score_id_seq', optional=True), primary_key=True), 
         sa.Column('baseball_id', sa.types.Integer, sa.ForeignKey('summer.baseball.baseball_id')), 
         schema = schema, 
        ) 

meta.create_all() 

Sonra yaratabilecek ayrı

class Hockey(Object): 
    ... 

ve

mapper(Hockey, hockey_table) 

Sonra sadece set sen sqlite kullanıyorsanız her yerde = Yok yukarıdaki şema ve değer (ler) istediğiniz aksi takdirde.

Çalışan bir örneğiniz yok, bu nedenle yukarıdaki örnek de çalışmıyor. Ancak, diğer insanların belirttiği gibi, veritabanları arasında taşınabilirliği korumaya çalışmak, sonuçta bir kaybetme oyunudur. PostgreSQL'i her yerde kullanmanı öneren insanlara +1 eklerim.

HTH, Saygılarımızla.

+0

Uygulama geliştirme Linux tarafında gerçekleşirken MSSQL (Windows ürünü) kullanarak bir işbirliği politikası olan insanlar hakkında ne düşünüyorsunuz? Mevcut veriler üzerinde bulunan veri miktarı göz önüne alındığında PostgreSQL'i kullanmak gerçekten harika olurken, göç ileride çok uzak. – Thornhale