SQLAlchemy 中的多级继承和版本控制问题



我在调用版本化的SQLAlchemy类的历史记录时似乎遇到了问题。我有以下继承结构设置:

Node(Versioned, Base)
Specimen(Node)
Animal(Specimen)

如果我尝试使用由以下人员生成的查询来获取动物历史记录:

AnimalHistory = self.__history_mapper__.class_
q = object_session(self).query(AnimalHistory).filter(AnimalHistory.id == self.id).order_by(AnimalHistory.version.desc())
logger.debug(q)

我收到以下查询:

SELECT bla bla #trimmed for brevity                                                                                                                                                                    FROM node_history 
JOIN specimen_history ON node_history.id = specimen_history.id AND node_history.version = specimen_history.version 
JOIN animal_history ON specimen_history.id = animal_history.id 
WHERE animal_history.id = 28 
ORDER BY animal_history.version DESC

基本上,我似乎缺少animal_history JOIN上的适当"AND"语句。正因为如此,我在动物和(标本,节点)之间得到了一个不需要的笛卡尔乘积

谁能指出history_meta.py内部需要修改才能解决这个问题?

谢谢!!

答案实际上是通过SQLAlchemy Google Groups提供的:

https://groups.google.com/forum/#!topic/sqlalchemy/YVAI4C94NBs

最新更新