Hello
I have a huge problem with süecific "one to one" relation. 

Woking (it's the tutorial code)

class Son(db.Model):
    __tablename__ = 'son'
    id = db.Column(db.Integer, primary_key=True)
    papa_id = db.Column(db.Integer, db.ForeignKey('papa.id'))
    papa = db.relationship("Papa", foreign_keys=[papa_id], back_populates="son")

class Papa(db.Model):
    __tablename__ = 'papa'
    id = db.Column(db.Integer, primary_key=True)
    son = db.relationship("Son", uselist=False, back_populates="papa")

main:
        p1 = Papa()
        p2 = Papa()
        s1 = Son()
        s2 = Son()

        db.session.add(p1)
        db.session.add(p2)
        db.session.add(s1)
        db.session.add(s2)

        db.session.commit()
        p1.son = s1
        p2.son = s2
        db.session.commit()
        p1.son = s2
        db.session.commit()

Works like a charm. afterwards every relation is correct

My code (I have to use a super class, that's the only difference):

class Super(db.Model):
    __tablename__ = 'super'
    id     = db.Column(db.Integer, primary_key=True)

class Mama(Super):
    __tablename__ = 'mama'
    id = db.Column(db.Integer, db.ForeignKey('super.id'), primary_key=True)

    daughter_id = db.Column(db.Integer, db.ForeignKey('daughter.id'))
    daughter = db.relationship("Daughter", foreign_keys=[daughter_id], 
back_populates="mama")

class Daughter(Super):
    __tablename__ = 'daughter'
    id = db.Column(db.Integer, db.ForeignKey('super.id'), primary_key=True)
    mama = db.relationship("Mama", foreign_keys=[Mama.daughter_id], 
uselist=False, back_populates="daughter")

main:
        m1 = Mama()
        m2 = Mama()
        d1 = Daughter()
        d2 = Daughter()

        db.session.add(m1)
        db.session.add(m2)
        db.session.add(d1)
        db.session.add(d2)
        db.session.commit()

        m1.daughter = d1
        m2.daughter = d2
        db.session.commit()

        m1.daughter = d2
        db.session.commit()

everything is correct EXCEPT:
*m2.daughter! *it still points on d2 instead of None. And the table 
contains still the daughter_id of d2. 

Thus, what foreign key did I miss? 

All the best and stay healthy!
SirAnn

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/592197fc-0f15-4c99-a2a7-a9443767bcedn%40googlegroups.com.

Reply via email to