tutorial query sqlalchemy

query - Insertando datos en la relación Muchos a Muchos en SQLAlchemy



sqlalchemy sqlite (1)

En primer lugar, puede simplificar su relación de muchos a muchos mediante el uso de association_proxy .

Entonces, dejaría la relación tal como está para no interferir con lo que hace SA:

# here *tag_to_topic* is the relation Table object Topic.tags = relation(''Tag'', secondary=tag_to_topic)

Y sugiero que simplemente cree una propiedad de envoltura simple que haga el trabajo de traducir la lista de cadenas a los objetos de relación (probablemente cambiará el nombre de la relación). Su clase de etiquetas se vería similar a:

class Topic(Base): __tablename__ = ''topic'' id = Column(Integer, primary_key=True) # ... other properties def _find_or_create_tag(self, tag): q = Tag.query.filter_by(name=tag) t = q.first() if not(t): t = Tag(tag) return t def _get_tags(self): return [x.name for x in self.tags] def _set_tags(self, value): # clear the list first while self.tags: del self.tags[0] # add new tags for tag in value: self.tags.append(self._find_or_create_tag(tag)) str_tags = property(_get_tags, _set_tags, "Property str_tags is a simple wrapper for tags relation")

Entonces este código debería funcionar:

# Test o = Topic() session.add(o) session.commit() o.str_tags = [''tag1''] o.str_tags = [''tag1'', ''tag4''] session.commit()

Supongamos que tengo 3 clases en SQLALchemy: Topic , Tag , Tag_To_Topic .

¿Es posible escribir algo como:

new_topic = Topic("new topic") Topics.tags = [''tag1'', ''tag2'', ''tag3'']

Me gustaría insertar automáticamente ''tag1'', ''tag2'' y ''tag3'' en la tabla de etiquetas, y también insertar la relación correcta entre new_topic y estas 3 etiquetas en la tabla Tag_To_Topic .

Hasta ahora no he podido averiguar cómo hacer esto debido a la relación de muchos a muchos. (Si fuera uno a muchos, sería muy fácil, SQLAlchemy ya lo haría por defecto. Pero esto es muchos a muchos).

es posible?

Gracias, Boda Cydo.