gpt4 book ai didi

python-storm orm多对多

转载 作者:太空宇宙 更新时间:2023-11-04 10:57:42 26 4
gpt4 key购买 nike

我正在使用 python-storm 作为 orm。多对多引用集让我很头疼:(

这些是相关对象:

class Author(object):
__storm_table__ = "author"
id = Int(primary=True)
name = Unicode()
institution_id = Int()
institution = Reference(institution_id, Institution.id)

def __init__(self, name):
self.name = name


class Paper(object):
__storm_table__ = "paper"
id = Int(primary=True)
name = Unicode()
conference_id = Int()
conference = Reference(conference_id, Conference.id)

def __init__(self, name):
self.name = name

class AuthorPapers(object):
__storm_table__ = "authorpapers"
__storm_primary__ = "author_id", "paper_id"
author_id = Int()
paper_id = Int()

相应的 sqlite 表如下所示

store.execute("CREATE TABLE if not exists author (id INTEGER PRIMARY KEY, name VARCHAR, institution_id INTEGER, FOREIGN KEY (institution_id) REFERENCES institution(id))")

store.execute("CREATE TABLE if not exists paper (id INTEGER PRIMARY KEY, name VARCHAR, conference_id INTEGER, FOREIGN KEY (conference_id) REFERENCES conference(id))")

store.execute("CREATE TABLE if not exists authorpapers (author_id INTEGER, paper_id INTEGER, PRIMARY KEY (author_id, paper_id))")

现在假设有两位作者合作完成了一篇论文

a = Author(u"Steve Rogers")
b = Author(u"Captain America")

和一张纸

p6 = Paper(u"Bunga Bunga")

所以现在我想使用以下方法将两位作者与论文相关联

Author.papers = ReferenceSet(Author.id, AuthorPapers.author_id, Paper.id, AuthorPapers.paper_id)

然后这样做

a.papers.add(p6)
b.papers.add(p6)

顺便说一句,它说它应该在 Storm 教程中工作......但我明白了

  File "/usr/lib64/python2.7/site-packages/storm/references.py", line 376, in add
self._relation2.link(remote, link, True)
File "/usr/lib64/python2.7/site-packages/storm/references.py", line 624, in link
pairs = zip(self._get_local_columns(local.__class__),
File "/usr/lib64/python2.7/site-packages/storm/references.py", line 870, in _get_local_columns
for prop in self.local_key)
File "/usr/lib64/python2.7/site-packages/storm/references.py", line 870, in <genexpr>
for prop in self.local_key)
File "/usr/lib64/python2.7/site-packages/storm/properties.py", line 53, in __get__
return self._get_column(cls)
File "/usr/lib64/python2.7/site-packages/storm/properties.py", line 97, in _get_column
attr = self._detect_attr_name(cls)
File "/usr/lib64/python2.7/site-packages/storm/properties.py", line 82, in _detect_attr_name
raise RuntimeError("Property used in an unknown class")
RuntimeError: Property used in an unknown class

我现在真的无法理解这一点。

最佳答案

我不是很熟悉 storm,但是看着 documentation例如,看起来这只是一个与 ReferenceSet 的参数传递顺序相关的问题。我试着用这个:

Author.papers = ReferenceSet(Author.id, AuthorPapers.author_id, AuthorPapers.paper_id, Paper.id)

而不是这个:

Author.papers = ReferenceSet(Author.id, AuthorPapers.author_id, Paper.id, AuthorPapers.paper_id)

并且没有出现异常。

关于python-storm orm多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8463649/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com