Is there an option to make sqlalchemy populate foreign key column(s) when a
relationship is set?
Basically I want the following:
child.parent = parent
assert child.parent_id == parent.id
Here is a full example you can run:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, relationship
Base = declarative_base()
class Parent(Base):
__tablename__ = 'parent'
id = Column(Integer, primary_key=True)
class Child(Base):
__tablename__ = 'child'
id = Column(Integer, primary_key=True)
parent_id = Column(ForeignKey(Parent.id), nullable=False)
parent = relationship(Parent, backref='children')
engine = create_engine('sqlite:///:memory:', echo=True)
Session = sessionmaker(bind=engine)
def run():
Base.metadata.create_all(engine)
session = Session()
parent1 = Parent(id=1)
session.add(parent1)
session.commit()
child = Child(parent=parent1)
print child.parent_id, ": None, but I'd like it to be 1"
session.add(child)
session.commit()
parent2 = Parent(id=2)
session.add(parent2)
session.commit()
child.parent = parent2
t = child.parent_id, child.parent.id
print t, ": child.parent_id is stale!"
if __name__ == '__main__':
run()
--
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 post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.