Newish to SQLAlchemy (donc ma terminologie est peut-être un peu éteinte). Je veux créer un objet de base de données dans le constructeur d'un autre, mais le problème est que je ne peux pas ajouter cet objet à la session, donc j'obtiens une erreur.SQLAlchemy - crée une instance dans une autre instance __init__
Mon schéma ressemble un peu à ce qui suit:
class Tag(Base):
__tablename__ = 'tag'
id = Column(Integer, Sequence('tag_id_seq'), primary_key=True, nullable=False)
type = Column(String(1), nullable=False)
name = Column(String(255), unique=True, nullable=False)
def __init__(self, type, name):
self.type=type
self.name=name
def __repr__(self):
return "<Tag('%s')>" % (self.id)
class Venue:
__tablename__ = 'venue'
tag_id = Column(Integer)
tag_type = Column(String(1), nullable=False)
location = Column(String(255), nullable=False)
tag = ForeignKeyConstraint(
(tag_id, tag_type),
(Tag.id, Tag.type),
onupdate='RESTRICT',
ondelete='RESTRICT',
)
def __init__(self,name,location):
self.tag = Tag('V',name)
self.location = location
Quand je fais ce qui suit:
session.add(Venue("Santa's Cafe","South Pole"))
Je reçois une erreur:
UnmappedInstanceError: Class '__builtin__.instance' is not mapped
Je suppose que cela est dû au fait l'objet Tag créé dans le constructeur de Venue n'est pas ajouté à la session. Ma question est comment/quand je fais cela. (Je préfèrerais vraiment créer cet objet Tag dans le constructeur si possible). Je pense que je pourrais le faire avec une scoped_session mais cela semble être une très mauvaise solution.
Merci
doit pas Venue hériter de base? –
Oui. (parmi d'autres problèmes!) – DaedalusFall