J'ai écrit un petit outil qui crée du code SQLAlchemy à partir d'une spécification écrite. L'outil peut créer un code comme ceci:Comment "résoudre" les clés étrangères dans les résultats de requête SQLAlchemy?
class Person(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
address_id = db.Column(db.Integer, db.ForeignKey('address.id'))
class Address(db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(50))
Je peux insérer de nouveaux enregistrements, je peux les interroger, qui fonctionne comme un charme, mais je voudrais vraiment ne pas avoir à rechercher manuellement l'adresse d'un La personne.
Je souhaite être en mesure d'accéder à l'adresse appartenant à une personne spécifique via l'objet Personne. Si je comprends bien les exemples, je dois le faire comme ceci (exemple basé sur http://flask-sqlalchemy.pocoo.org/2.1/models/#one-to-many-relationships)?
class Person(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
address = db.relationship('Address', backref='person',
lazy='dynamic')
class Address(db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(50))
person_id = db.Column(db.Integer, db.ForeignKey('person.id'))
Cela me semble tout à l'envers, je dois donner à chaque adresse un « lien » à une personne, puis backref donc je peux avoir une adresse pour une personne? Est-ce que ce n'est pas possible de faire directement à partir de la personne?
En outre, la création de code pour cela est beaucoup plus compliquée, donc j'aimerais vraiment éviter cela.
Je sais, c'est pourquoi je demande. Il n'y a pas d'exemples 1: 1 que je puisse trouver et les exemples 1: N ont tous (pour moi) une chose superflue en arrière-plan. Je voudrais savoir comment faire 1: 1 le plus simple possible, donc je n'ai pas à faire une deuxième requête pour l'adresse quand j'ai la personne. – ramdyne