我想创建一个反向的家谱(谱系),从孩子开始,显示直到第一对夫妇的整个序列。 我的数据库有1000个条目,并有一个模式和如下示例:
0 id | 17444
5 Sire | 100
6 did | 203
7 Dam | 102
11 Name | Bruce
其中子项由名称和did表示。大坝和父系的入口也是DID
我尝试了以下方法:
def pedigree(did):
con = sqlite3.connect('subjects.db')
cursor = con.execute('SELECT * FROM animals where did IS "%s" ' % did)
for row in cursor:
print(row[11])
pedigree(row[5])
pedigree(row[7])
它打印出一堵文字墙,例如:
Bruce
Thomas
Martha
Partick
Sara
Kenneth
Catherine
我想我应该使用某种ADT,但我从大学起就没有弄乱过。 任何有用的建议都会很好! 这不是学校的作业,这是我妻子想要的,哈哈
这个问题和我自己的问题几乎一样,而且他们已经做到了:Pedigree/Family tree chart from database
一个选项是使用递归公共表表达式遍历层次结构:
递归查询的锚点通过
did
选择初始行;然后,递归部分沿着关系向上,选择对应于上一次迭代的sire
和dam
的记录,直到树耗尽为止。作为奖励,我添加了一个名为lvl
的列,它表示树中每个节点的深度基本上,这模仿了您在应用程序代码中实现的算法-但是这应该更有效,因为整个工作在数据库中一次执行,而不是在python中迭代和运行多个查询
相关问题 更多 >
编程相关推荐