Python 跨项目重用SQLAlchemy模型

Python 跨项目重用SQLAlchemy模型,python,sqlalchemy,code-reuse,Python,Sqlalchemy,Code Reuse,我有一些标准的SQLAlchemy模型,可以跨项目重用。大概是这样的: from sqlalchemy import Column, Integer, String, Unicode from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class Category(Base): __tablename__ = 'category' id = Column(Inte

我有一些标准的SQLAlchemy模型,可以跨项目重用。大概是这样的:

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
我想把它放在一个共享库中,并将它导入到每个新项目中,而不是剪切和粘贴它,但我不能,因为
声明性_base
实例是在项目中单独定义的。如果有多个会话,他们将不会共享会话。我如何解决这个问题

。那行吗?SQLAlchemy会从mixin类中准确导入外键吗?

当您调用

Base=declarative\u Base()

SA为此
基础创建新的
元数据

要重用模型,必须将主模型的
元数据
绑定到可重用模型,但在通过以下方式导入可重用模型之前:

Base.metadata=my\u main\u app.db.metadata

MixIn类用于重复列声明和扩展类方法。 对于连接基于mixin的可重用应用程序,您必须在代码中为每个模型手动定义具体的类

SQLAlchemy会准确导入吗 来自mixin类的外键

具有外键和约束的MixIn类

from sqlalchemy.schema import UniqueConstraint
from sqlalchemy.ext.declarative import declared_attr

class MessageMixIn(object):
    ttime = Column(DateTime)

    @declared_attr
    def sometable_id(cls):
        return Column(Integer, ForeignKey('sometable.id'))

    @declared_attr
    def __table_args__(cls):
        return (UniqueConstraint('sometable_id', 'ttime'), {})

在此之后,您将如何处理基础对象?我记得,通过将多个基本对象绑定到同一个引擎,我能够将多个基本对象中的多个元数据合并在一起。我可以想象,使用该引擎的一个会话来访问您定义的所有表就足够了,基本对象就不需要了。如果只需要绑定元数据,我就可以轻松地导入和重新绑定,同时确保两个独立的应用程序不会在同一个Python进程中运行。