我有一些标准的 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
我想把它放在一个共享库中,然后将它导入到每个新项目中,而不是剪切和粘贴它,但我不能,因为 declarative_base
实例在项目。如果不止一个,他们将不会共享 session 。我该如何解决这个问题?
Here's another question that suggests using mixin classes .那行得通吗? SQLAlchemy 会准确地从混合类中导入外键吗?
最佳答案
当你打电话时
Base = declarative_base()
SA 为此基础
创建新的元数据
。
要重用您的模型,您必须将主要模型的元数据
绑定(bind)到可重用模型,但在通过以下方式导入您的可重用模型之前:
Base.metadata = my_main_app.db.metadata
MixIn 类对于重复列声明和扩展类方法很有用。
对于基于 MixIn 的连接
可重用应用,您必须在代码中为每个模型手动定义具体类。
Will SQLAlchemy accurately import foreign keys from mixin classes?
带有外键和约束的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 - 跨项目重用 SQLAlchemy 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5807694/