Lúc đầu, bạn phải chia sẻ metadata
và không sử dụng bình phương-sqlalchemy db.Model làm cơ sở cho bạn có thể sử dụng lại ứng dụng.
Thứ hai, bạn phải tạo lại tất cả các lớp với việc mở rộng cơ sở mới từ bình phương sqlalchemy cho tín hiệu hỗ trợ, cắt ngắn và các thứ khác.
Tích hợp các căn cứ (nó có thể là lỗi):
def integrate_models(cls, nbase):
new_bases = list(cls.__bases__) + [nbase]
new_dict = dict(cls.__dict__)
new_dict.update(dict(nbase.__dict__))
return type.__new__(cls.__class__, cls.__name__, tuple(new_bases), new_dict)
ứng dụng
Ví dụ Flask với phần mở rộng SQLAlchemy:
# -*- coding: utf-8 -*-
from flask import Flask
from flaskext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True)
def __init__(self, username, email):
self.username = username
self.email = email
def __repr__(self):
return '<User %r>' % self.username
if __name__ == '__main__':
from some_model_base import init_metadata
init_metadata(db.Model.metadata)
from some_model import SomeClass
SomeClass = integrate_models(SomeClass, db.Model)
db.create_all()
print SomeClass.query.all()
đâu some_model_base.py:
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
def init_metadata(metadata):
Base.metadata = metadata
Và some_model.py :
from sqlalchemy import Column, Integer, String
from some_model_base import Base
class SomeClass(Base):
__tablename__ = 'some_table'
id = Column(Integer, primary_key=True)
name = Column(String(50))
Trong ví dụ này chỉ kiểm tra lối tắt db.create_all và SomeClass.query.
Xin lỗi vì tiếng Anh kém của tôi.
Hm, tôi sẽ cần dùng thử. Bạn có thể tìm cách cấu hình các mô hình trong mô-đun kia để có mối quan hệ với các mô hình trong chương trình chính không? –
Tôi nghĩ rằng cách tốt nhất làm điều đó - khai báo trong các lớp cơ sở ứng dụng có thể tái sử dụng của bạn hoặc MixIns và sau đó xây dựng các mô hình cụ thể phân lớp chúng. – estin