Kir*_*dda 9 python code-reuse sqlalchemy
我有一些标准的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
Run Code Online (Sandbox Code Playgroud)
我想把它放在一个共享库中,然后将它导入到每个新项目中,而不是剪切和粘贴它,但我不能,因为declarative_base实例是在项目中单独定义的.如果不止一个,他们将不会分享会话.我该如何解决这个问题?
这是另一个建议使用mixin类的问题.这可行吗?SQLAlchemy会从mixin类中准确地导入外键吗?
你打电话时
Base = declarative_base()
metadataSA为此创建新的Base.
要重用模型,您必须将metadata主模型绑定到可重用模型,但在导入可重用模型之前,可以执行以下操作:
Base.metadata = my_main_app.db.metadata
MixIn 类对于重复列声明和扩展类方法很有用。对于connecting基于 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'), {})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1758 次 |
| 最近记录: |