Quelqu'un est-il familier avec ActiveRecord de la "has_many: à travers des" relations pour les modèles? Je ne suis pas vraiment un gars Rails, mais c'est essentiellement ce que je suis en train de faire.relation sqlalchemy par un autre (déclarative)
À titre d'exemple, les projets artificiel considèrent programmeurs et missions:
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Column, ForeignKey
from sqlalchemy.types import Integer, String, Text
from sqlalchemy.orm import relation
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Assignment(Base):
__tablename__ = 'assignment'
id = Column(Integer, primary_key=True)
description = Column(Text)
programmer_id = Column(Integer, ForeignKey('programmer.id'))
project_id = Column(Integer, ForeignKey('project.id'))
def __init__(self, description=description):
self.description = description
def __repr__(self):
return '<Assignment("%s")>' % self.description
class Programmer(Base):
__tablename__ = 'programmer'
id = Column(Integer, primary_key=True)
name = Column(String(64))
assignments = relation("Assignment", backref='programmer')
def __init__(self, name=name):
self.name = name
def __repr__(self):
return '<Programmer("%s")>' % self.name
class Project(Base):
__tablename__ = 'project'
id = Column(Integer, primary_key=True)
name = Column(String(64))
description = Column(Text)
assignments = relation("Assignment", backref='project')
def __init__(self, name=name, description=description):
self.name = name
self.description = description
def __repr__(self):
return '<Project("%s", "%s...")>' % (self.name, self.description[:10])
engine = create_engine('sqlite://')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
projets ont plusieurs missions.
Les programmeurs ont beaucoup de missions. (Euphémisme?)
Mais dans mon bureau au moins, les programmeurs ont également de nombreux projets - Je voudrais cette relation à déduire à travers les missions assignées au programmeur.
Je voudrais le modèle de programmeur pour avoir un attribut « projets » qui renvoie une liste des projets associés au programmateur à travers le modèle d'affectation. Comment puis-je décrire clairement cette relation et simplement en utilisant la syntaxe déclarative de sqlalchemy?
Merci!
$ diff projects.bak projects.py 30a31 > Projets = relation ("Projet", 'cession' = secondaire) ^ à la fois simple et claire, je vous remercie – clayg