This thing is called referential integrity 
(https://en.wikipedia.org/wiki/Referential_integrity) and is enforced on 
the database level - you can't have a value in Child.parent_id which is not 
in Parent.id. The ForeignKey creates a constraint in the database which 
ensures the referential integrity of a column.

If you don't need it, you can define a column as a plain integer:

parent_id = Column(Integer, nullable=False)

but then SQLAlchemy won't be able to figure the joins so you'll need to 
specify them manually:

parent = relationship('parent', primaryjoin='Parent.id==Child.parent_id')


On Wednesday, February 27, 2019 at 8:29:39 AM UTC+10, Daniel Leon wrote:
>
> Suppose I have a Parent and Child table with Child having
> parent_id = Column(Integer, ForeignKey('parent.id'), back_populates=
> 'children', nullable=False)
> parent = relationship('parent')
> and Parent having
> children = relationship('child', back_populates='parent')
>
> Then if I try to delete a Parent, since Child has parent_id non-nullable 
> I'd get error *Cannot insert the value NULL into column parent_id*. I 
> want Child to retain its parent_id after its Parent is deleted.
>
> I didn't find a cascade option that accomplishes this.
>

-- 
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 sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to