Mam kilka standardowych modeli SQLAlchemy, które ponownie wykorzystuję w projektach. Coś takiego:Ponowne wykorzystywanie modeli SQLAlchemy w różnych projektach
from sqlalchemy import Column, Integer, String, Unicode
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Category(Base):
__tablename__ = 'category'
id = Column(Integer, primary_key=True)
slug = Column(String(250), nullable=False, unique=True)
title = Column(Unicode(250), nullable=False)
def __call__(self):
return self.title
Chciałbym umieścić to w udostępnionej biblioteki i zaimportować go do każdego nowego projektu zamiast wycinania i wklejania, ale nie mogę, ponieważ instancja declarative_base
definiuje odrębnie projekt. Jeśli jest ich więcej, nie będą udostępniać sesji. Jak to obejść?
Here's another question that suggests using mixin classes. Czy to może działać? Czy SQLAlchemy dokładnie zaimportuje klucze obce z klas mixin?
Co robisz z obiektami bazy po tym? Na koniec pamiętam, że udało mi się połączyć wiele metadanych z wielu obiektów Base, wiążąc je wszystkie do tego samego silnika. Wyobrażam sobie, że wystarczy użyć sesji z tego silnika, aby uzyskać dostęp do wszystkich zdefiniowanych tabel. –
Nic więcej za pomocą obiektu Base. Jeśli wiązanie z metadanymi wystarczy, mogę łatwo importować i ponownie wiązać - przy jednoczesnym zapewnieniu, że dwie oddzielne aplikacje nie działają w tym samym procesie Python. –