Я работаю над программой, которая использует pyDatalog для запроса базы данных sqlite. Ключ таблицы в базе данных событий, которая определяется следующим образом:pyDatalog: «объект несовместим с классом queried» при запросе запроса
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()
Часть, с которой я столкнулся, передает ссылку на каждый идентификатор события в datalog из python. Я продолжаю получать ошибку «TypeError: Object несовместим с классом, который запрашивается».
Я уменьшил правила вплоть до их для отладки:
+ 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)», она работает нормально (она печатает кортеж (счет, «Джон Адамс»), но с помощью строки «query =' getEvent (...) она сохраняет с ошибкой вышеприведенной ошибки в последней строке, указанной выше.
Кто-нибудь знает, что означает эта ошибка, и как правильно передать ссылку на идентификатор события в pyDatalog?
Does Base наследует возможности pyDatatlog, используя Base = declarative_base (cls = pyDatalog.Mixin, metaclass = pyDatalog.sqlMetaMixin)? – user474491
Кроме того, какую версию pyDatalog вы используете? – user474491
Я использую pyDatalog 0.13.0. Базовый класс создается, как указано выше. Однако я забыл связать сеанс с базовым классом (см. Ниже). – highfellow