我有一個sqlalchemy模型,其中所有大多數表/對象都有一個註釋字段。因此,爲了遵循DRY原則,我將該領域轉移到了混合課程中。sqlalchemy將mixin列移動到結尾
class NotesMixin(object):
notes = sa.Column(sa.String(4000) , nullable=False, default='')
class Service(Base, NotesMixin):
__tablename__ = "service"
service_id = sa.Column(sa.Integer, primary_key=True)
name = sa.Column(sa.String(255), nullable=False, index=True, unique=True)
class Datacenter(Base, NotesMixin):
__tablename__ = "datacenter"
datacenter_id = sa.Column(sa.Integer, primary_key=True)
name = sa.Column(sa.String(255), nullable=False, index=True, unique=True)
class Network(Base, NotesMixin, StatusMixin):
__tablename__ = "network"
network_id = sa.Column(sa.Integer, primary_key=True)
etc...
現在筆記列是模型/ db中的第一列。我知道它不會影響我的應用程序的功能,但是它讓我感到有點在id之前看到註釋等等。任何將它移動到最後的方法?
我確實更喜歡更清潔的解決方案,因爲它已經內置到sqlalchemy中。我注意到,如果您有多個聲明性基本mixin,那麼您繼承mixin的順序很重要。這是我預計的。 – 2014-01-29 21:17:19
美麗的解決方案,謝謝! – sleepycal 2014-07-23 20:14:58
雖然這需要較少的代碼,但它使用「黑客」方式感覺有點迂迴,也就是外鍵約束的非內在副作用,以確保排序。我更喜歡'_creation_order'解決方案,因爲這是** EXPLICITLY **設置列創建順序的預期方式,無論是否爲FK。 – Devy 2015-07-16 15:11:39