from pony.orm import *
db = Database()
class Author(db.Entity):
post = Optional('Post', cascade_delete=True)
edits = Set('PostEdit')
class Post(db.Entity):
author = Required(Author)
edits = Set('PostEdit')
class PostEdit(db.Entity):
editor = Required(Author)
post = Optional(Post)
db.bind('sqlite', ':memory:')
db.generate_mapping(create_tables=True)
# fill database
with db_session:
Author(id=1)
Post(author=1, id=1)
PostEdit(id=1, editor=1, post=1)
# and crash it
with db_session:
Author.get(id=1).delete()
Traceback (most recent call last):
File "pony_cascade_test.py", line 33, in <module>
Author.get(id=1).delete()
File "/home/andreymal/.local/lib/python3.6/site-packages/pony/orm/core.py", line 394, in __exit__
commit()
File "/home/andreymal/.local/lib/python3.6/site-packages/pony/orm/dbapiprovider.py", line 52, in wrap_dbapi_exceptions
except dbapi_module.IntegrityError as e: raise IntegrityError(e)
pony.orm.dbapiprovider.IntegrityError: FOREIGN KEY constraint failed