max*_*max 11 python sqlalchemy
我正在使用SQLAlchemy,我的对象模型中的许多类具有相同的两个属性:id和(整数和主键),以及name(字符串).我试图避免在每个类中声明它们如此:
class C1(declarative_base()):
id = Column(Integer, primary_key = True)
name = Column(String)
#...
class C2(declarative_base()):
id = Column(Integer, primary_key = True)
name = Column(String)
#...
Run Code Online (Sandbox Code Playgroud)
有什么好办法呢?我尝试使用元类但它还没有用.
dha*_*fey 10
你可以将你的公共属性分解为一个mixin类,然后乘以它继承declarative_base():
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
class IdNameMixin(object):
id = Column(Integer, primary_key=True)
name = Column(String)
class C1(declarative_base(), IdNameMixin):
__tablename__ = 'C1'
class C2(declarative_base(), IdNameMixin):
__tablename__ = 'C2'
print C1.__dict__['id'] is C2.__dict__['id']
print C1.__dict__['name'] is C2.__dict__['name']
Run Code Online (Sandbox Code Playgroud)
编辑:您可能认为这会导致C1并C2共享相同的Column对象,但正如SQLAlchemy文档中所述,Column对象在源自mixin类时被复制.我已更新代码示例以演示此行为.
| 归档时间: |
|
| 查看次数: |
1738 次 |
| 最近记录: |