我试图在每次用户执行某些操作时存储历史信息。由于历史信息对于多个表是相同的(例如,商店 - 从文件x导入的数据),我想将历史数据保存在单独的表中,并将相关历史项的id存储在其他表中。我遇到的问题是,并非每个表都会在每次更改历史记录时添加其历史记录列表 - 因此在历史记录中为每个表(数十个表)存储ForeignKey看起来不是正确的方法。
from sqlalchemy.ext.declarative import declared_attr
from sqlalchemy import DateTime, Column, Integer, String
from sqlalchemy.sql import func
from sqlalchemy.orm import relationship
from sqlalchemy.sql.schema import ForeignKey
class TableA(Base):
__tablename__ = 'tablea'
id = Column(Integer, primary_key=True, nullable = False)
data = Column(String(), nullable=True)
history = relationship("History")
class TableB(Base):
__tablename__ = 'tableb'
id = Column(Integer, primary_key=True, nullable = False)
data = Column(String(), nullable=True)
history = relationship("History")
class TableC(Base):
__tablename__ = 'tablec'
id = Column(Integer, primary_key=True, nullable = False)
data = Column(String(), nullable=True)
history = relationship("History")
class History(Base):
__tablename__ = 'history'
id = Column(Integer, primary_key=True, nullable = False)
details = Column(String(), nullable=True)
version = Column(String(), nullable=True)
tablea_id = Column(Integer, ForeignKey('tablea.id'))
tableb_id = Column(Integer, ForeignKey('tableb.id'))
tablec_id = Column(Integer, ForeignKey('tablec.id'))
class Base(object):
@declared_attr
def __tablename__(cls):
return str(cls.__name__)
create_date = Column(DateTime, default=func.now())
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base(cls=Base)
我能弄清楚如何做到这一点的唯一方法是将TableA,B,C中的历史ID列表存储为字符串。然后使用JSON将字符串解码为python列表。但这种方法很乏味且容易出错。有什么想法吗?