Je travaille sur un programme qui utilise pyDatalog pour interroger une base de données sqlite. Le tableau ci-clé dans la base de données est l'événement, qui est défini comme suit:pyDatalog: 'objet incompatible avec la classe interrogée' lors d'une requête
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)
Chaque événement se réfère alors à une table de détails avec plus d'informations.
Ce que je veux être en mesure de faire est d'exécuter une série de requêtes sur chaque événement de la séquence. Les jeux de règles sont chargés à partir d'un fichier externe à l'aide de pyDatalog.load()
La partie qui me pose problème consiste à transmettre une référence à chaque ID d'événement dans le fichier de données de python. Je continue d'obtenir l'erreur "TypeError: objet est incompatible avec la classe qui est interrogée."
J'ai réduit les règles jusqu'à ce pour le débogage:
+ 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)
Le code qui demande à la requête ressemble à ceci (partie d'une plus grande classe):
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)
Si je décommenter la ligne "query = 'parent (bill, X)'", ça fonctionne bien (ça imprime le tuple (bill, 'John Adams')), mais avec la ligne "query = 'getEvent (...", ça reste à défaut avec l'erreur ci-dessus sur la dernière ligne indiquée ci-dessus
Est-ce que quelqu'un sait ce que cette erreur signifie, et comment transmettre correctement la référence à l'ID d'événement dans pyDatalog?
Est-ce que Base hérite des capacités de pyDatatlog, en utilisant Base = declarative_base (cls = pyDatalog.Mixin, metaclass = pyDatalog.sqlMetaMixin)? – user474491
En outre, quelle version de pyDatalog utilisez-vous? – user474491
J'utilise pyDatalog 0.13.0. La classe de base est créée comme ci-dessus. Cependant j'ai oublié d'associer une session avec la classe de base (voir ci-dessous). – highfellow