gpt4 book ai didi

python - SQLAlchemy:避免重复声明式类定义

转载 作者:太空狗 更新时间:2023-10-29 18:03:25 25 4
gpt4 key购买 nike

我正在使用 SQLAlchemy,我的对象模型中的许多类都具有相同的两个属性:id 和(整数和主键)以及名称(字符串)。我试图避免像这样在每个类中声明它们:

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)
#...

这样做的好方法是什么?我尝试使用元类,但它还没有用。

最佳答案

您可以将共同属性分解为 mixin class ,并与 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']

编辑:您可能认为这会导致 C1C2 共享相同的 Column 对象,但是如 SQLAlchemy docs 中所述, Column 对象在源自混合类时被复制。我已经更新了代码示例以演示此行为。

关于python - SQLAlchemy:避免重复声明式类定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3626787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com