Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.Sign up
(I tried to reproduce this for few months and today I did it >_<)
import gc from datetime import datetime from pony.orm import * db = Database() class Author(db.Entity): comments = Set('Comment') class Post(db.Entity): pass class Comment(db.Entity): author = Required(Author) db.bind('sqlite', ':memory:') db.generate_mapping(create_tables=True) # prepare data print('fill database...') with db_session: a = Author(id=1) for i in range(2, 5000): Author(id=i) Post(id=i) Comment(author=a) del a # test it! @db_session def testme(): author = Author.get(id=15) comments_list = Comment.select(lambda x: x.author.id == author.id) ids = list(select(x.id for x in Post)) print('started') while True: testme() gc.collect()
If you run it, then memory of python process will leak (+8MB per second on my machine).
Very strange things that prevented me from reproducing it:
# New features * All arguments of db.bind() can be specified as keyword arguments. Previously Pony required the first positional argument which specified the database provider. Now you can pass all the database parameters using the dict: db.bind(**db_params). See https://docs.ponyorm.com/api_reference.html#Database.bind * The `optimistic` attribute option is added https://docs.ponyorm.com/api_reference.html#cmdoption-arg-optimistic # Bugfixes * Fixes #219: when a database driver raises an error, sometimes this error was masked by the 'RollbackException: InterfaceError: connection already closed' exception. This happened because on error, Pony tried to rollback transaction, but the connection to the database was already closed and it masked the initial error. Now Pony displays the original error which helps to understand the cause of the problem. * Fixes #276: Memory leak * Fixes the __all__ declaration. Previously IDEs, such as PyCharm, could not understand what is going to be imported by 'from pony.orm import *'. Now it works fine. * Fixes #232: negate check for numeric expressions now checks if value is zero or NULL * Fixes #238, fixes #133: raise TransactionIntegrityError exception instead of AssertionError if obj.collection.create(**kwargs) creates a duplicate object * Fixes #221: issue with unicode json path keys * Fixes bug when discriminator column is used as a part of a primary key * Handle situation when SQLite blob column contains non-binary value