私は、pyDatalog を使用して sqlite データベースを照会するプログラムに取り組んでいます。データベースのキー テーブルは 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 に正しく渡す方法を知っている人はいますか?