Tôi có một số mô hình SQLAlchemy tiêu chuẩn mà tôi sử dụng lại trên các dự án. Một cái gì đó như thế này:Sử dụng lại các mô hình SQLAlchemy qua các dự án
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
Tôi muốn đặt điều này trong một thư viện chia sẻ và nhập nó vào mỗi dự án mới thay vì cắt và dán nó, nhưng tôi không thể, vì dụ declarative_base
được định nghĩa riêng trong dự án. Nếu có nhiều hơn, họ sẽ không chia sẻ phiên. Tôi làm cách nào để giải quyết vấn đề này?
Here's another question that suggests using mixin classes. Có thể làm việc đó? SQLAlchemy có nhập chính xác khóa ngoại từ các lớp mixin không?
Bạn đang làm gì với các đối tượng cơ sở sau này? Cuối cùng tôi nhớ, tôi đã có thể hợp nhất nhiều siêu dữ liệu với nhau từ nhiều đối tượng Base bằng cách liên kết tất cả chúng với cùng một công cụ. Tôi sẽ tưởng tượng rằng nó sẽ là đủ để sử dụng một phiên từ động cơ đó để truy cập vào tất cả các bảng bạn đã xác định. –
Không có gì thêm với đối tượng Cơ sở. Nếu ràng buộc với siêu dữ liệu là tất cả phải mất, tôi có thể dễ dàng nhập và rebind - trong khi đảm bảo rằng hai ứng dụng riêng biệt không chạy trong cùng một quá trình Python. –