我正在开发一个使用 pyDatalog 查询 sqlite 数据库的程序。数据库中的key表为Event,定义如下:
class Event(Base):
__tablename__ = 'Event'
id = Column('id', Integer, primary_key = True)
eventType = Column('eventType', Integer, ForeignKey('EventType.id'))
dateTime = Column('dateTime', DateTime)
def __init__(self, eventType, dateTime):
self.eventType = eventType
self.dateTime = dateTime
def __repr__(self):
return "<Event(%d, %d, %s)>" % (self.id, self.eventType, self.dateTime)
然后,每个事件都引用一个包含更多信息的详细信息表。
我想要做的是对序列中的每个事件运行一系列查询。使用 pyDatalog.load() 从外部文件加载规则集
我遇到问题的部分是将每个事件 ID 的引用从 python 传递到数据日志中。我不断收到错误“TypeError:对象与查询的类不兼容”。
我已将规则减少到这些以进行调试:
+ parent(bill, 'John Adams')
ancestor(X,Y) <= parent(X,Y)
ancestor(X,Y) <= parent(X,Z) & ancestor(Z,Y)
getEvent(EvtId, Evt) <= (Event.id[Evt] == EvtId)
询问查询的代码如下所示(较大类的一部分):
def validateEvent(self, event):
# validate the event instance 'event'
print "validating event: %s" % (event)
#query = 'parent(bill, X)'
query = 'getEvent(' + str(event.id) + ', Evt)'
print query
print pyDatalog.ask(query)
如果我取消注释 "query='parent(bill,X)'" 行,它可以正常工作(它打印 (bill, 'John Adams') 元组),但使用 "query = 'getEvent(..." 行,它在上面显示的最后一行出现上述错误。
有谁知道这个错误是什么意思,以及如何正确地将事件 ID 的引用传递给 pyDatalog?