2016-03-29 21 views
0

Uygulamamızı ilk olarak oluşturduğumuzda, SQLAlchemy ORM kullanıyorduk, ancak zaman geçtikçe, gittikçe daha da zorlaşıyor ve zorlukları daha da artıyor ve daha hızlı bir şeye geçmek istiyoruz sorguları yapmakta açık. Bazı erken testlerde, Core bu ihtiyaçları karşılar gibi görünüyor, bu yüzden anahtarı yapmaya başlamak istiyoruz. SQLAlchemy ORM'den Çekirdeğe Geçiş

mevcut modellerin tamamı

örneğin Bildirimsel kullanılarak tanımlanmıştır:
class User(Base): 
    __tablename__ = 'users' 

    id = Column(Integer, primary_key=True) 
    name = Column(String(100), nullable=False) 
    autocomplete_crosses = relationship(u'Parent') 

class Parent(Base): 
    __tablename__ = 'parents' 
    id = Column(Integer, primary_key=True) 
    user = Column(ForeignKey('users.id'), nullable=False) 
    name = Column(String(100), nullable=False) 
    users = relationship(User') 

her zaman __table__ aramaya gerek bir yana deklaratif bu kullanmanın daha kolay bir yolu var mı.

s = select([User.__table__.c.name, Parent.__table__.c.name])\ 
    .select_from(User.__table__.join(Parent.__table__)) 

doğrudan benim masa isimleri erişebilir miyim ve sadece bu temiz hale için kullanıyoruz: İşte şu anda ayrıntılı ve çirkin hissediyor ki, yapıyorum ne? Tüm tablolar için otomatik olarak yapmak isterseniz tüm sınıfları tanımladığınız sonra

+1

Peki, sizi 'user = User .__ table__' yapmaktan vazgeçecek hiçbir şey yok. – univerio

+0

Tüm tablolar için bunu otomatik olarak yapmanın herhangi bir yolu var mı? – Eli

cevap

0

, bunu yansıtabilir: Çok büyülü çünkü ben aslında bunu önermiyoruz

for cls in Base._decl_class_registry.values(): 
    if hasattr(cls, "__table__") and cls.__table__ is not None: 
     globals()[cls.__table__.name] = cls.__table__ 

. Özellikle, linterleri bozar çünkü globals()'u değiştirir, ancak bunu böyle yaparsınız.