Ich habe ein SQL-Modell, in dem alle meisten Tabellen/Objekte ein Notizenfeld haben. Um dem DRY-Prinzip zu folgen, habe ich das Feld in eine Mixinklasse verlegt.sqlalchemy Move mixin Spalten zu Ende
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...
Jetzt ist die Spalte notizen die erste Spalte im Modell/db. Ich weiß, es hat keinen Einfluss auf die Funktionalität meiner App, aber es irritiert mich ein wenig, um Notizen vor der ID usw. zu sehen. Irgendeine Möglichkeit, es zum Ende zu bewegen?
Ich bevorzugte definitiv die Reinigerlösung, da sie bereits in sqlalchemy eingebaut ist. Ich stelle fest, dass die Reihenfolge, in der Sie das Mixin erben, von Bedeutung ist, wenn Sie mehrere deklarative Base-Mixins haben. Das ist zu erwarten, nehme ich an. –
Schöne Lösung, danke! – sleepycal
Zwar erfordert dies weniger Code, aber es fühlt sich ein wenig umständlich an, da es einen "Hack" -Weg verwendet, d. H. Einen nicht beabsichtigten Nebeneffekt der Fremdschlüsseleinschränkung, um die Reihenfolge sicherzustellen. Ich bevorzuge die '_creation_order'-Lösung, da dies die beabsichtigte Möglichkeit ist, ** die Erstellungsreihenfolge der Spalten ** explizit festzulegen, unabhängig davon, ob sie ein FK sind oder nicht. – Devy