SQLAlchemy, liste contenant plusieurs types [Python] - Python - Programmation
Marsh Posté le 01-08-2008 à 15:38:03
Ouais, mais nan
Je sais plus ce que fais SQLAlchemy exactement pour les propriétés, mais vu que tu défini deux fois la même propriété 'children' (dans ton mapper sur la classe System), y'en a un qui écrase l'autre.
Vu le message d'erreur, on dirait qu'il garde que la relation avec Star.
Ceci dit, c'est pas vraiment un problème lié à SQLAlchemy, mais plutôt un problème de conception : ton System contient des objets, qui sont soit des Stars, soit des Planets. Et une Star contient des Planets.
Donc, il faut que tu généralises le concept d'objets d'un système, qui sera soit une Star, soit une Planet, et ton System contiendra ce genre d'objets.
Regarde comment faire de l'héritage avec SQLAlchemy.
Marsh Posté le 01-08-2008 à 15:41:57
Un truc du genre (pseudo langage)
Code :
|
SystemObject est une classe "abstraite", juste là pour représenter la relation de parenté entre Star et Planet.
Marsh Posté le 02-08-2008 à 13:18:08
Merci beaucoup, c'est exactement ça.
Pour ceux que cela intéressent voici mon code:
Code :
|
Si System hérite aussi de SpatialObject c'est parcque un systeme de deux planètes peut exister dans l'orbite d'une etoile et donc dans un autre systeme plus grand.
Marsh Posté le 08-10-2008 à 09:28:28
salut!
j'ai vue ton mail et je voudrais savoir si sqlalchemy est une base de donnée puissant car je veux utiliser un bd avec python et je cherche un truc commme mysql, merci pour ton aide
Marsh Posté le 08-10-2008 à 09:45:31
falifalibe a écrit : sqlalchemy est une base de donnée |
non
Marsh Posté le 01-08-2008 à 13:59:32
Bonjour, je découvre SQLAlchemy a travers Turbogears et je suis devant un petit problème.
Je veux créer un modèle de galaxie à travers trois classes différentes (au final il doit y en avoir beaucoup plus) :
Chacunes de ces classes possède un attribut children qui est une liste contenant tout les objects qui lui sont attachés.
Typiquement on aurait System -> Star -> Planet. Jusque là pas de problème.
Là où le problème se pose c'est si je veux que l'attribut children puisse contenir plusieurs classes, exemple:
Imaginons un systeme contenant une étoile avec ses planètes, mais également une planète qui n'est pas dans l'orbite de l'étoile
System -> Star -> Planet
-> Planet
Voici le code que j'ai écris pour faire face à ce cas :
Tout va bien jusqu'a ce que je commit les changements:
>>> mysys = System()
>>> mystar = Star()
>>> myplanet = Planet()
>>> mysys.ID = 1
>>> mystar.ID = 2
>>> myplanet.ID = 3
>>> mylostplanet = Planet()
>>> mylostplanet.ID = 4
>>> mysys.children.append(mystar)
>>> mysys.children.append(mylostplanet)
>>> mystar.children.append(myplanet)
>>> session.flush()
...
...
...
FlushError: Attempting to flush an item of type <class 'x4m.model.Planet'> on co
llection 'System.children', whose mapper does not inherit from that of <class 'x
4m.model.Star'>.
Je m'en remets à vous.