模式中一种常见的关系类型是:joiner表有一个datetime元素,用于存储其他两个表的行之间随时间变化的关系的历史记录。这些关系是一对一或一对多的,即使我们使用的是一个通常意味着多对多的关联表。在任何给定的时间点上,只有一个映射(该时间点的最新映射)是有效的。例如:
Tables:
Computer: [id, name, description]
Locations: [id, name, address]
ComputerLocations: [id, computers_id, locations_id, timestamp]
一个Computers
对象一次只能属于一个Locations
对象(并且Locations
可以有许多Computers
),但是我们将历史存储在表中。ComputerLocations
中的行不会被删除,只会在查询时被新行取代。也许在将来,一些prune类型的事件会删除旧的行,因为它们的有用性会降低
我要做的是在SQLAlchemy中建模,特别是在ORM中,以便Computers
类具有以下属性:
Computers
对象时,将向ComputerLocations
添加一个日期时间为NOW()的新行SQLAlchemy ORM中是否有特定的设计模式或具体的方法来实现这一点?文档中有一个关于Non-traditional mappings的部分,其中包括将类映射到多个表和任意选择,因此这看起来很有希望。此外,还有另一个提到vertical tables的堆栈溢出问题。由于我相对缺乏SQLAlchemy方面的经验,我还不能将这些信息合成为一个健壮而优雅的解决方案。任何帮助都将不胜感激
我使用的是MySQL,但解决方案对于通过SQLAlchemy方言系统的任何数据库都应该足够通用
目前没有回答
相关问题 更多 >
编程相关推荐