Changelog¶
Version Numbering¶
TinyDB follows the SemVer versioning guidelines. For more information,seesemver.org
Note
When new methods are added to theQuery API, this mayresult in breaking existing code that uses the property syntaxto access document fields (e.g.Query().some.nested.field)where the field name is equal to the newly added query method.Thus, breaking changes may occur in feature releases even thoughthey don’t change the public API in a backwards-incompatiblemanner.
To prevent this from happening, one can use the dict accesssyntax (Query()['some']['nested']['field']) that willnot break even when new methods are added to theQuery API.
unreleased¶
- nothing yet
v4.8.0 (2023-06-12)¶
- Feature: Allow retrieve multiple documents by document ID using
Table.get(doc_ids=[...])(seepull request 504).
v4.7.1 (2023-01-14)¶
- Improvement: Improve typing annotations(seepull request 477).
- Improvement: Fix some typos in the documentation(seepull request 479andpull request 498).
v4.7.0 (2022-02-19)¶
- Feature: Allow inserting
Documentinstances usingTable.insert_multiple(seepull request 455). - Performance: Only convert document IDs of a table when returning documents.This improves performance the
Table.countandTable.getoperationsand also forTable.searchwhen only returning a few documents(seepull request 460). - Internal change: Run all
TabletestsJSONStoragein addition toMemoryStorage.
v4.6.0 (2022-01-17)¶
- Feature: Addmap() query operation to apply a transformationto a document or field when evaluating a query(seepull request 445).Note: This may break code that queries for a field named
mapusing theQueryAPIs property access syntax - Feature: Add support fortyping-extensionsv4
- Documentation: Fix a couple of typos in the documentation (seepull request 446,pull request 449 andpull request 453)
v4.5.2 (2021-09-23)¶
- Fix: Make
Table.delete()’s argument priorities consistent withother table methods. This means that if you pass bothcondaswell asdoc_idstoTable.delete(), the latter will be preferred(seeissue 424)
v4.5.0 (2021-06-25)¶
- Feature: Better type hinting/IntelliSense for PyCharm, VS Code and MyPy(seeissue 372).PyCharm and VS Code should work out of the box, for MyPy seeMyPy Type Checking
v4.4.0 (2021-02-11)¶
v4.3.0 (2020-11-14)¶
- Feature: Add operation for updating multiple documents:
update_multiple(seeissue 346) - Improvement: Expose type information for MyPy typechecking (PEP 561)(seepull request 352)
v4.2.0 (2020-10-03)¶
v4.1.0 (2020-05-07)¶
v4.0.0 (2020-05-02)¶
Breaking Changes¶
Python 2 support has been removed, seeissue 284for background
API changes:
Removed classes:
DataProxy,StorageProxyAttributes removed from
TinyDBin favor ofcustomizingTinyDB’s behavior by subclassing it and overloading__init__(...)andtable(...):DEFAULT_TABLEDEFAULT_TABLE_KWARGSDEFAULT_STORAGE
Arguments removed from
TinyDB(...):default_table: replace withTinyDB.default_table_name='name'table_class: replace withTinyDB.table_class=Class
TinyDB.contains(...)’sdoc_idsparameter has been renamed todoc_idand now only takes a single document IDTinyDB.purge_tables(...)has been renamed toTinyDB.drop_tables(...)TinyDB.purge_table(...)has been renamed toTinyDB.drop_table(...)TinyDB.write_back(...)has been removedTinyDB.process_elements(...)has been removedTable.purge()has been renamed toTable.truncate()Evaluating an empty
Query()without any test operators will now resultin an exception, useQuery().noop()(introduced in v4.1.0) instead
ujsonsupport has been removed, seeissue 263 andissue 306 for backgroundThe deprecated Element ID API has been removed (e.g. using the
Elementclass oreidsparameter) in favor the Document API, seepull request 158 for detailson the replacement
Improvements¶
- TinyDB’s internal architecture has been reworked to be more simple andstreamlined in order to make it easier to customize TinyDB’s behavior
- With the new architecture, TinyDB performance will improve for manyapplications
v3.15.1 (2019-10-26)¶
- Internal change: fix missing values handling for
LRUCache
v3.14.2 (2019-09-13)¶
- Internal change: support correct iteration for
LRUCacheobjects
v3.14.1 (2019-07-03)¶
- Internal change: fix Query class to permit subclass creation(seepull request 270)
v3.12.2 (2018-12-12)¶
- Internal change: convert documents to dicts during insertion(seepull request 256)
- Internal change: use tuple literals instead of tuple class/constructor(seepull request 247)
- Infra: ensure YAML tests are run(seepull request 252)
v3.12.1 (2018-11-09)¶
- Fix: Don’t break when searching the same query multiple times(seepull request 249)
- Internal change: allow
collections.abc.Mutableas valid document types(seepull request 245)
v3.12.0 (2018-11-06)¶
- Feature: Add encoding option to
JSONStorage(seepull request 238) - Internal change: allow
collections.abc.Mutableas valid document types(seepull request 245)
v3.11.1 (2018-09-13)¶
- Bugfix: Make path queries (
db.search(where('key))) work again(seeissue 232) - Improvement: Add custom
reprrepresentations for main classes(seepull request 229)
v3.11.0 (2018-08-20)¶
- Drop official support for Python 3.3. Python 3.3 has reached itsofficial End Of Life as of September 29, 2017. It will probably continueto work, but will not be tested against(issue 217)
- Feature: Allow extending TinyDB with a custom storage proxy class(seepull request 224)
- Bugfix: Return list of document IDs for upsert when creating a newdocument (seeissue 223)
v3.10.0 (2018-07-21)¶
- Feature: Add support for regex flags(seepull request 216)
v3.9.0 (2018-04-24)¶
v3.8.1 (2018-03-26)¶
- Bugfix: Don’t install tests as a package anymore(seepull request #195)
v3.8.0 (2018-03-01)¶
- Feature: Allow disabling the query cache with
db.table(name,cache_size=0)(seepull request #187) - Feature: Add
db.write_back(docs)for replacing documents(seepull request #184)
v3.7.0 (2017-11-11)¶
- Feature:
one_offor checking if a value is contained in a list(seeissue 164) - Feature: Upsert (insert if document doesn’t exist, otherwise update;seehttps://forum.m-siemens.de/d/30-primary-key-well-sort-of)
- Internal change: don’t read from storage twice during initialization(seehttps://forum.m-siemens.de/d/28-reads-the-whole-data-file-twice)
v3.6.0 (2017-10-05)¶
- Allow updating all documents using
db.update(fields)(seeissue #157). - Rename elements to documents. Document IDs now available with
doc.doc_id,usingdoc.eidis now deprecated(seepull request #158)
v3.5.0 (2017-08-30)¶
- Expose the table name via
table.name(seeissue #147). - Allow better subclassing of the
TinyDBclass(seepull request #150).
v3.4.1 (2017-08-23)¶
- Expose TinyDB version via
importtinyb;tinydb.__version__(seeissue #148).
v3.4.0 (2017-08-08)¶
- Add new update operations:
add(key,value),subtract(key,value),andset(key,value)(seepull request #145).
v3.3.1 (2017-06-27)¶
- Use relative imports to allow vendoring TinyDB in other packages(seepull request #142).
v3.3.0 (2017-06-05)¶
- Allow iterating over a database or table yielding all documents(seepull request #139).
v3.2.3 (2017-04-22)¶
- Fix bug with accidental modifications to the query cache when modifyingthe list of search results (seeissue #132).
v3.2.2 (2017-01-16)¶
- Fix the
Queryconstructor to prevent wrong usage(seeissue #117).
v3.2.1 (2016-06-29)¶
- Fix a bug with queries on documents that have a
pathkey(seepull request #107). - Don’t write to the database file needlessly when opening the database(seepull request #104).
v3.2.0 (2016-04-25)¶
- Add a way to specify the default table name viadefault_table(seepull request #98).
- Add
db.purge_table(name)to remove a single table(seepull request #100).- Along the way: celebrating 100 issues and pull requests! Thanks everyone for every single contribution!
- Extend API documentation (seeissue #96).
v3.1.3 (2016-02-14)¶
- Fix a bug when using unhashable documents (lists, dicts) with
Query.anyorQuery.allqueries(seea forum post by karibul).
v3.1.2 (2016-01-30)¶
- Fix a bug when using unhashable documents (lists, dicts) with
Query.anyorQuery.allqueries(seea forum post by karibul).
v3.1.1 (2016-01-23)¶
v3.1.0 (2015-12-31)¶
v3.0.0 (2015-11-13)¶
- Overhauled Query model:
where('...').contains('...')has been renamed towhere('...').search('...').- Support for ORM-like usage:
User=Query();db.search(User.name=='John'). where('foo')is an alias forQuery().foo.where('foo').has('bar')is replaced by eitherwhere('foo').barorQuery().foo.bar.- In case the key is not a valid Python identifier, arraynotation can be used:
where('a.b.c')is nowQuery()['a.b.c'].
- In case the key is not a valid Python identifier, arraynotation can be used:
- Checking for the existence of a key has to be done explicitly:
where('foo').exists().
- Migrations from v1 to v2 have been removed.
SmartCacheTablehas been moved tomsiemens/tinydb-smartcache.- Serialization has been moved tomsiemens/tinydb-serialization.
- Empty storages are now expected to return
Noneinstead of raisingValueError.(seeissue #67.
v2.4.0 (2015-08-14)¶
- Allow custom parameters for custom test functions(seeissue #63 andpull request #64).
v2.3.2 (2015-05-20)¶
- Fix a forgotten debug output in the
SerializationMiddleware(seeissue #55). - Fix an “ignored exception” warning when using the
CachingMiddleware(seepull request #54) - Fix a problem with symlinks when checking out TinyDB on OSX Yosemite(seeissue #52).
v2.3.1 (2015-04-30)¶
- Hopefully fix a problem with using TinyDB as a dependency in a
setup.pyscript(seeissue #51).
v2.3.0 (2015-04-08)¶
- Added support for custom serialization. That way, you can teach TinyDBto store
datetimeobjects in a JSON file :)(seeissue #48 andpull request #50) - Fixed a performance regression when searching became slower with every search(seeissue #49)
- Internal code has been cleaned up
v2.2.2 (2015-02-12)¶
- Fixed a data loss when using
CachingMiddlewaretogether withJSONStorage(seeissue #47)
v2.2.1 (2015-01-09)¶
- Fixed handling of IDs with the JSON backend that converted integersto strings (seeissue #45)
v2.2.0 (2014-11-10)¶
- Extended
anyandallqueries to take lists as conditions(seepull request #38) - Fixed an
decodeerrorwhen installing TinyDB in a non-UTF-8 environment(seepull request #37) - Fixed some issues with
CachingMiddlewarein combination withJSONStorage(seepull request #39)
v2.1.0 (2014-10-14)¶
v2.0.0 (2014-09-05)¶
Warning
TinyDB changed the way data is stored. You may need to migrateyour databases to the new scheme. Check out theUpgrade Notes for details.
- The syntax
queryindbhas been removed, usedb.containsinstead. - The
ConcurrencyMiddlewarehas been removed due to a insecure implementation(seeissue #18). Considertinyrecord instead. - Better support for working withDocument IDs.
- Added support fornested comparisons.
- Added
allandanycomparisons on lists. - Added optional :<http://tinydb.readthedocs.io/en/v2.0.0/usage.html#smart-query-cache>`_.
- The query cache is now afixed size LRU cache.
v1.3.0 (2014-07-02)¶
- Fixedbug #7: IDs not unique.
- Extended the API:
db.count(where(...))anddb.contains(where(...)). - The syntax
queryindbis nowdeprecated and replacedbydb.contains.
v1.1.0 (2014-05-06)¶
- Improved the docs and fixed some typos.
- Refactored some internal code.
- Fixed a bug with multiple
TinyDB?instances.
v1.0.1 (2014-04-26)¶
- Fixed a bug in
JSONStoragethat broke the database when removing entries.
v1.0.0 (2013-07-20)¶
- First official release – consider TinyDB stable now.
