NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #563 most downloaded on PyPI
a little orm
Last release 3 days ago
27 Sep 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
16 years old
222 releases · first in 2010
Add select_extend() method to extend existing SELECT-ion. Doc.
select_extend() method to extend existing SELECT-ion. Doc.set() as iterable value type, fixes #1445ModelSelect.select() with no
parameters resulted in an empty selection. Fixes #1438.Add constraints for ON UPDATE/ON DELETE to foreign-key constraint - #1443.
Add constraints for ON UPDATE/ON DELETE to foreign-key constraint - #1443.
One column per quarter.
Adds Model.index(), a short-hand method for declaring ModelIndex instances.
Adds Model.index(), a short-hand method for declaring ModelIndex instances.
Re-add a shim for PrimaryKeyField (renamed to AutoField) and log a deprecation warning if you try to use it.
Re-add a shim for PrimaryKeyField (renamed to AutoField) and log a
deprecation warning if you try to use it.
Includes fix for bug where column-name to field-name translation was not being done when running select queries on models whose field name differed fr
Includes fix for bug where column-name to field-name translation was not being done when running select queries on models whose field name differed from the underlying column name (#1437).
Ensures that the pysqlite headers are included in the source distribution so that certain C extensions can be compiled.
Ensures that the pysqlite headers are included in the source distribution so that certain C extensions can be compiled.
Nothing published for this version
Update travis-ci build scripts to use Postgres 9.6 and test against Python 3.6.
namedtuple objects when iterating over a
cursor.foreign-key-name_id, but it can now be
customized.sqlite_ext module.dataset module.Removed AESEncryptedField. View commits
Removed AESEncryptedField.
It was brought to my attention that there was some serious potential for security vulnerabilities. Rather than give users a false sense of security, I…
The main change in this release is the removal of the AESEncryptedField,
which was included as part of the playhouse.fields extension. It was brought
to my attention that there was some serious potential for security
vulnerabilities. Rather than give users a false sense of security, I've decided
the best course of action is to remove the field.
playhouse.fields.AESEncryptedField over security concerns
described in ticket #1264.CompositeKey.Fixed significant bug in the savepoint commit/rollback implementation. Many thanks to @Syeberman for raising the issue. See #1225 for details.
savepoint commit/rollback implementation. Many
thanks to @Syeberman for raising the issue. See #1225 for details.INTERVAL columns. The new IntervalField in
the postgres_ext module is suitable for storing datetime.timedelta.sqlite3 library was causing other, unrelated
libraries to throw errors when attempting to import.case_sensitive parameter to the SQLite REGEXP function
implementation. The default is False, to preserve backwards-compatibility.dataset
extension. See #1213 for details.drop_table to raise an exception if the user attempts to drop
tables with CASCADE when the database backend does not support it.AESEncryptedField.Fixed #1218, where the use of playhouse.flask_utils was requiring the sqlite3 module to be installed.
playhouse.flask_utils was requiring the
sqlite3 module to be installed.In this release there are two notable changes:
In this release there are two notable changes:
Model.create_or_get() method was removed. See the documentation
for an example of the code one would write to replicate this functionality.This release contains a single important bugfix for a regression in specifying the type of lock to use when opening a SQLite transaction.
This release contains a single important bugfix for a regression in specifying the type of lock to use when opening a SQLite transaction.
This release contains numerous cleanups.
This release contains numerous cleanups.
sqliteq extension.commit and
rollback.model_to_dict helper.pskel to be installed into bin directory.Tuple() type to Peewee to enable expressing arbitrary
tuple expressions in SQL.Decimal instances in the
DecimalField.SqliteExtDatabase to expose common PRAGMA
settings. For example, to set the cache size to 4MB, db.cache_size = 1000.commit() or rollback() from within the
scope of an atomic block. See docs.depends_on meta
option. Refs #1076.playhouse.sqlite_ext.SqliteExtDatabase,
but it now exists in peewee.SqliteDatabase.CROSS JOIN expressions in select queries.FOR X, e.g. FOR UPDATE or FOR SHARE.UNBOUNDED PRECEDING, etc. See docs.OperationalError is raised if the user calls connect()
on an already-open Database object. Previously, the existing connection would
remain open and a new connection would overwrite it, making it impossible to
close the previous connection. If you find this is causing breakage in your
application, you can switch the connect() call to get_conn() which will
only open a connection if necessary. The error is indicative of a real
issue, though, so audit your code for places where you may be opening a
connection without closing it (module-scope operations, e.g.).This release contains two small bugfixes.
This release contains two small bugfixes.
prefetch that was
clearing out the GROUP BY and HAVING clauses of sub-queries.This release contains bugfixes as well as a new playhouse extension module for working with SQLite in multi-threaded / concurrent environments. The ne
This release contains bugfixes as well as a new playhouse extension module for
working with SQLite in multi-threaded / concurrent environments.
The new module is called playhouse.sqliteq and it works by serializing
queries using a dedicated worker thread (or greenlet). The performance is quite
good, hopefully this proves useful to someone besides myself! You can learn
more by reading the sqliteq documentation.
As a miscellaneous note, I did some major refactoring and cleanup in
ExtQueryResultsWrapper and it's corollary in the speedups module. The code
is much easier to read than before.
TimestampField which affected the accuracy
of sub-second timestamps (for resolution > 1).DeferredRelation to be used multiple times if there are
multiple references to a given deferred model.coerce flag.exc.message.This release contains bugfixes and a small backwards-incompatible change to the way foreign key ObjectIdDescriptor is named (issue #1050).
This release contains bugfixes and a small backwards-incompatible change to the
way foreign key ObjectIdDescriptor is named (issue #1050).
ensure_join method to accept on and join_type
parameters. Thanks @paulbooth.Model class from being treated as a "real" Model.PRAGMA statements.speedups C extension was not calling the correct
model initialization method, resulting in model instances returned as results
of a query having their dirty flag incorrectly set.TimestampField with zero values reporting
the incorrect datetime.db_column of a ForeignKeyField for the name of the
ObjectIdDescriptor, except when the db_column and field name are the
same, in which case the ID descriptor will be named <field_name>_id.This release contains mostly bug-fixes, clean-ups, and API enhancements.
This release contains mostly bug-fixes, clean-ups, and API enhancements.
db_url
extensionpeewee.OperationalError is raised consistently when
using the RetryOperationalError mixin.pwiz will import the appropriate extensions when
vendor-specific fields are used.pwiz-generated models containing UnknownField
placeholders do not blow up when you instantiate them.BlobField could not be used if it's parent model
pointed to an uninitialized database Proxy.scalar().Signal subclasses were not returning rows affected on
save.pwiz.SqliteExtDatabase handles the automatic rowid (and
docid) columns. Thanks for alerting me to the issue and providing a
failing test case @jberkel.set instances to be used on the right-hand side of IN exprs.id primary key was inherited
regardless. When users would inadvertently include it in their queries, it
would use the table alias of it's parent class.db_column in djpeeweetruncate_date with Postgresql. Thanks @Zverik.bytes wrapper used by PasswordField to bytes.COUNT or SUM,
since the python driver will already give us the right Python value.DeferredRelations, allowing for a nicer
API. Thanks @brenguyen711.pwiz with MySQL
database columns containing spaces. Yes, fucking spaces.None when determining if the database has been
set on ModelOptions. Thanks @joeyespo.TimestampField for storing datetimes using integers. Greater than
second delay is possible through exponentiation.Database.drop_index() method.max_depth parameter to the model_to_dict function in
the playhouse.shortcuts extension module.SelectQuery.first() function accepts a parameter n which
applies a limit to the query and returns the first row. Previously the limit
was not applied out of consideration for subsequent iterations, but I believe
usage has shown that a limit is more desirable than reserving the option to
iterate without a second query. The old behavior is preserved in the new
SelectQuery.peek() method.group_by(), order_by(), window() now accept a keyward argument
extend, which, when set to True, will append to the existing values
rather than overwriting them.<foreign_key>_id attribute.DATABASE_URL as a recognized parameter to the Flask config.
insert_many.This release is long overdue so apologies if you've been waiting on it and running off master. There are numerous bugfixes contained in this release,
This release is long overdue so apologies if you've been waiting on it and running off master. There are numerous bugfixes contained in this release, so I'll list those first this time.
get_or_create works with GFKs.PasswordField, thanks
@mosquito.last_insert_id() when using APSWDatabase.APSWDatabase..limit(0) had no effect. Now adds LIMIT 0.__hash__ method for Modelcount() for compound select queries.foreign_key_id descriptor to set the foreign
key value.model_to_dict().clean_prefetch_query, thanks to @p.kamayevpskel now.sqlite3 library to match MySQL and Postgres.
Thanks @M157qBinary type for BlobField.sqlite_ext Cython library.ModelOptions, providing an extensionSmallIntegerField type.ManyToManyField.db_url
module. Thanks @RealSalmontruncate table, thanks @dev-zero for the sample
code.related_name model Meta option to be a callable that accepts
the foreign key field instance.This release includes a couple new field types and greatly improved C extension support for both speedups and SQLite enhancements. Also includes some
This release includes a couple new field types and greatly improved C extension support for both speedups and SQLite enhancements. Also includes some work, suggested by @foxx, to remove some places where Proxy was used in favor of more obvious APIs.
dict and tuple QueryResultWrapper classes, faster date formatting, and a faster field and model sorting.murmurhash2.UUIDField is now supported for SQLite and MySQL, using text and varchar respectively, thanks @foxx!BinaryField, thanks again, @foxx!PickledField to playhouse.fields.ManyToManyField now accepts a list of primary keys when adding or removing values from the through relationship.Proxy for defining circular foreign key relationships, you now need to use DeferredRelation.Proxy for defining many-to-many through tables, you now need to use DeferredThroughModel.Meta.extension_module and Meta.extension_options to declare extension and any options. For more details, see VirtualModel.COMMIT statements for SELECT queries. This was not necessary, but added due to an influx of confused users creating GitHub tickets. Hint: learn to user your damn database, it's not magic!Some of these may have been included in a previous release, but since I did not list them I'm listing them here.
remove_field(). Thanks @klen!This is another small release which adds code to automatically build the SQLite C extension if libsqlite is available. The release also includes:
This is another small release which adds code to automatically build the SQLite C extension if libsqlite is available. The release also includes:
UUIDField with SQLite.db_url module via register_database.prefetch() supports fetching multiple foreign-keys to the same model class.Small release which includes some changes to the BM25 sorting algorithm and the addition of a `JSONField` for use with the new JSON1 extension.
Small release which includes some changes to the BM25 sorting algorithm and the addition of a JSONField for use with the new JSON1 extension.
People were having trouble building the sqlite extension. I figure enough people are having trouble that I made it a separate command: python setup.py
People were having trouble building the sqlite extension. I figure enough people are having trouble that I made it a separate command: python setup.py build_sqlite_ext.
Jacked up the setup.py
Jacked up the setup.py
New APIs, features, and performance improvements.
New APIs, features, and performance improvements.
### Notable changes and new features
[PasswordField](http://docs.peewee-orm.com/en/latest/peewee/playhouse.html#PasswordField) that uses the bcrypt module.
Added new Model [Meta.only_save_dirty](http://docs.peewee-orm.com/en/latest/peewee/models.html#model-options-and-table-metadata) flag to, by default, only save fields that have been modified.
Added support for [upsert()](http://docs.peewee-orm.com/en/latest/peewee/api.html#InsertQuery.upsert) on MySQL (in addition to SQLite).
Implemented SQLite ranking functions (rank and bm25) in Cython, and changed both the Cython and Python APIs to accept weight values for every column in the search index. This more closely aligns with the APIs provided by FTS5. In fact, made the APIs for FTS4 and FTS5 result ranking compatible.
Major changes to the sqlite_ext module. Function callbacks implemented in Python were implemented in Cython (e.g. date manipulation and regex processing) and will be used if Cython is available when Peewee is installed.
Support for the experimental new [FTS5](http://sqlite.org/fts5.html) SQLite search extension.
Added SearchField for use with the SQLite FTS extensions.
Added RowIDField for working with the special rowid column in SQLite.
Added a model class validation hook to allow model subclasses to perform any validation after class construction. This is currently used to ensure that FTS5Model subclasses do not violate any rules required by the FTS5 virtual table.
### Bugs fixed
#751, fixed some very broken behavior in the MySQL migrator code. Added more tests.
#718, added a RetryOperationalError mixin that will try automatically reconnecting after a failed query. There was a bug in the previous error handler implementation that made this impossible, which is also fixed.
#### Small bugs
#713, fix column name regular expression in SQLite migrator.
#724, fixed NULL handling with the Postgresql JSONField.
#725, added __module__ attribute to DoesNotExist classes.
#727, removed the commit_select logic for MySQL databases.
#730, added documentation for Meta.order_by API.
#745, added cast() method for casting JSON field values.
#748, added docs and method override to indicate that SQLite does not support adding foreign key constraints after table creation.
Check whether pysqlite or libsqlite were compiled with BerkeleyDB support when using the BerkeleyDatabase.
Clean up the options passed to SQLite virtual tables on creation.
### Small features
#700, use sensible default if field's declared data-type is not present in the field type map.
#707, allow model to be specified explicitly in prefetch().
#734, automatic testing against python 3.5.
#753, added support for upsert() ith MySQL via the REPLACE INTO ... statement.
#757, pwiz, the schema intropsection tool, will now generate multi-column index declarations.
#756, pwiz will capture passwords using the getpass() function rather than via the command-line.
Removed Database.sql_error_handler(), replaced with the RetryOperationalError mixin class.
Documentation for Meta.order_by and Meta.primary_key.
Better documentation around column and table constraints.
Improved performance for some methods that are called frequently.
Added coerce parameter to BareField and added documentation.
[View commits](https://github.com/coleifer/peewee/compare/2.6.4...2.7.0)
Updating so some of the new APIs are available on pypi.
Updating so some of the new APIs are available on pypi.
INSERT statements.ArrayField to accept tuples in addition to lists.datetime.time instead of timedelta for MySQL time fields.RETURNING clauses. Update, Insert and Delete queries can now be called with RETURNING to retrieve the rows that were affected. See docs.model_to_dict(). Docs.model_to_dict() to introspect query for which fields to serialize.FixedCharField which uses column type CHAR.PRAGMA statements to be run on new SQLite connections. Docs.berkeley_build.sh script. See instructions on my blog instead.Nothing published for this version
Added create_or_get() as a companion to get_or_create().
Just a regular old release.
aggregate_rows() when there are multiple joins to the same table.get_or_create().ON CONFLICT clauses for UPDATE and INSERT queries. Docs.playhouse.kv.strip_parens(), with plans to perhaps move more performance-critical code to Cython in the future.prefetch() and aggregate_rows().This release contains a number of small fixes and enhancements.
This release contains a number of small fixes and enhancements.
prefetch and aggregate_rows() methods.PRAGMA index_list() return value.pwiz was not passing table names to introspector.APSWDatabase implementation.upsert keyword argument to the Model.save() function (SQLite only).ON CONFLICT SQLite clause for INSERT and UPDATE queries. Docsplayhouse.db_url.connect(). Docs.This is a tiny update, mainly consisting of a new-and-improved implementation of get_or_create() (docs).
This is a tiny update, mainly consisting of a new-and-improved implementation of get_or_create() (docs).
get_or_create() now returns a 2-tuple consisting of the model instance and a boolean indicating whether the instance was created. The function now behaves just like the Django equivalent.This is a relatively small release with a few important bugfixes.
This is a relatively small release with a few important bugfixes.
SELECT queries (i.e. UNION, INTERSECT, etc).SELECT queries.pwiz. Thanks @elgow!ModelAlias does not use the appropriate FieldAlias objects.parse function to the playhouse.db_url module. Thanks @stt!Node.in_() and Node.not_in() do not take *args anymore and instead take a single argument.There are a couple new features so I thought I'd bump to 2.5.x. One change Postgres users may be happy to see is the use of INSERT ... RETURNING to pe
There are a couple new features so I thought I'd bump to 2.5.x. One change Postgres users may be happy to see is the use of INSERT ... RETURNING to perform inserts. This should definitely speed up inserts for Postgres, since an extra query is no longer needed to get the new auto-generated primary key.
I also added a new context manager/decorator that allows you to use a different database for the duration of the wrapped block.
insert_many.autorollback with PostgresqlExtDatabase. Thanks @davidmcclure.DataSet.JOIN_<type> became JOIN.<type>, e.g. .join(JOIN.LEFT_OUTER).OP_<code> became OP.<code>.+ and - prefixes to indicate ascending/descending ordering.RowIDField for sqlite_ext playhouse module. This field can be used to interact with SQLite rowid fields.LateralJoin helper to the postgres_ext playhouse module.Unreported, fixed bug to not leave expired connections sitting around in the pool.
aggregate_rows()prefetch().jsonb type with BinaryJSONField.UNION ALL queries in #512SqlCipherExtDatabase, which combines the sqlcipher database with the sqlite extensions.pwiz.This is a relatively small release with mostly bug fixes and updates to the documentation. The one new feature I'd like to highlight is the ManyToMany
This is a relatively small release with mostly bug fixes and updates to the documentation. The one new feature I'd like to highlight is the ManyToManyField (docs).
aggregate_rows() when used with a CompositeKey.playhouse.shortcuts module.Node.not_in() method.Model.select().I'm excited about this release, as in addition to a number of new features and bugfixes, it also is a step towards cleaner code. I refactored the test
I'm excited about this release, as in addition to a number of new features and bugfixes, it also is a step towards cleaner code. I refactored the tests into a number of modules, using a standard set of base test-cases and helpers. I also introduced the mock library into the test suite and plan to use it for cleaner tests going forward. There's a lot of work to do to continue cleaning up the tests, but I'm feeling good about the changes. Curiously, the test suite runs faster now.
aggregate_rows() query result wrapper.Model.save().ExecutionContext (see docs).atomic, transaction, savepoint, execution_context).IS NULL and IS NOT NULL queries. The latter was actually necessary since the behavior is different from NOT IS NULL (...).Biggest news: peewee has a new logo!
Biggest news: peewee has a new logo!
SqliteExtDatabase.aggregate() decorator changed so that the aggregate name is the first parameter, and the number of parameters is the second parameter. If no values are specified, peewee will choose the name of the class and an un-specified number of arguments (-1).save(), only the dirty fields would be saved.playhouse.apsw_ext module.playhouse.reflection module now supports introspecting indexes.playhouse.sqlite_aggregates that contains a handful of aggregates you may find useful when developing with SQLite.This release contains numerous improvements, particularly around the built-in database introspection utilities. Peewee should now also be compatible w
This release contains numerous improvements, particularly around the built-in database introspection utilities. Peewee should now also be compatible with PyPy.
transitive_closure SQLite extension.This release contains a number of improvements to the reflection and migrate extension modules. I also added an encrypted *diary* app to the examples
This release contains a number of improvements to the reflection and migrate extension modules. I also added an encrypted diary app to the examples directory.
This release contains a few small bugfixes.
This release contains a few small bugfixes.
This release contains a number of enhancements to the playhouse collection of extensions.
This release contains a number of enhancements to the playhouse collection of extensions.
As of 2.4.0, most of the introspection logic was moved out of the pwiz module and into playhouse.reflection.
Database objects from a connection string.reflection module.Model.dirty_fields did not return an empty set for some subclasses of QueryResultWrapper.This release contains a lot of improvements to the documentation and a mixed bag of other new features and bugfixes.
This release contains a lot of improvements to the documentation and a mixed bag of other new features and bugfixes.
As of 2.3.3, all peewee Database instances have a default of True for the threadlocals parameter. This means that a connection is opened for each thread. It seemed to me that by sharing connections across threads caused a lot of confusion to users who weren't aware of (or familiar with) the threadlocals parameter. For single-threaded apps the behavior will not be affected, but for multi-threaded applications, if you wish to share your connection across threads you must now specify threadlocals=False. For more information, see the documentation.
I also renamed the Model.get_id() and Model.set_id() convenience methods so as not to conflict with Flask-Login. These methods should have probably been private anyways, and the new methods are named _get_pk_value() and _set_pk_value().
PostgresqlExtDatabase.berkeley_build.sh script, which was incompatible with the newest version of bsddb3.This release contains mostly bugfixes.
This release contains mostly bugfixes.
This release contains a fix for a bug introducted in 2.3.0. Table names are included, unquoted, in update queries now, which is causing some problems
This release contains a fix for a bug introducted in 2.3.0. Table names are included, unquoted, in update queries now, which is causing some problems when the table name is a keyword.
This release contains a number of bugfixes, enhancements and a rewrite of much of the documentation.
This release contains a number of bugfixes, enhancements and a rewrite of much of the documentation.
UPDATE queries to contain subqueries for values (example).INSERT INTO / SELECT FROM queries (docs).SqliteDatabase to set the database's journal mode.UUIDField out of the playhouse and into peeweeorwhere() method.order_by meta option inheritance bug.SQL('*').count() when query has a limit or offset.This is a small release and contains a handful of fixes.
This is a small release and contains a handful of fixes.
Window object for creating reusable window definitions.DISTINCT ON (...).Database and build script.UUIDField handles None values (thanks @alexlatchford).This release contains a complete rewrite of pwiz as well as some improvements to the SQLite extension, including support for the BM25 ranking algorith
This release contains a complete rewrite of pwiz as well as some improvements to the SQLite extension, including support for the BM25 ranking algorithm for full-text searches. I also merged support for sqlcipher, an encrypted SQLite database with many thanks to @thedod!
pwiz, schema introspection utility.Model.save() returns a value indicating the number of modified rows.PostgresqlDatabase.last_insert_id() leaving a transaction open in autocommit mode (#353).This release contains a new migrations module in addition to a number of small features and bug fixes.
This release contains a new migrations module in addition to a number of small features and bug fixes.
Model.save() indicating number of rows affected.date_trunc() method that works for Sqlite.Model.sqlall() class-method to return all the SQL to generate the model / indices.prefetch() not selecting the correct primary key.Nothing published for this version
I've been looking forward to this release, as it contains a couple new features that I've been wanting to add for some time now. Hope you find them us
I've been looking forward to this release, as it contains a couple new features that I've been wanting to add for some time now. Hope you find them useful.
OVER syntax.UNION, INTERSECT, EXCEPT as well as symmetric difference.This release contains a large refactoring of the way SQL was generated for both the standard query classes (Select, Insert, Update, Delete) as well as
This release contains a large refactoring of the way SQL was generated for both
the standard query classes (Select, Insert, Update, Delete) as well as
for the DDL methods (create_table, create_index, etc). Instead of joining
strings of SQL and manually quoting things, I've created Clause objects
containing multiple Node objects to represent all parts of the query.
I also changed the way peewee determins the SQL to represent a field. Now a
field implements __ddl__ and __ddl_column__ methods. The former creates
the entire field definition, e.g.:
"quoted_column_name" <result of call to __ddl_column__> [NOT NULL/PRIMARY KEY/DEFAULT NEXTVAL(...)/CONSTRAINTS...]
The latter method is responsible just for the column type definition. This might
return VARCHAR(255) or simply TEXT. I've also added support for
arbitrary constraints on each field, so you might have:
price = DecimalField(decimal_places=2, constraints=[Check('price > 0')])
autorollback option to the Database class that will roll back the
transaction before raising an exception.JSONField type to the postgresql_ext module.FROM clause to be an arbitrary Node object (#290).schema is a new Model.Mketa option and is used throughout the code.wraps(), thanks @lucasmarshallprepared() after create(), thanks @soasme.Support for savepoints (Sqlite, Postgresql and MySQL) using an API similar to that of transactions.
peewee.IntegrityError.Proxy into peewee (previously in playhouse.proxy).R() to SQL().@database.commit_on_success.Commits: https://github.com/coleifer/peewee/compare/2.1.6...2.1.7 Released 2013-12-25
Lightweight Django integration.
Changes included in 2.1.6:
pscyopg2.Commits: https://github.com/coleifer/peewee/compare/2.1.5...2.1.6 Released 2013-11-19
Rewrote the playhouse.postgres_ext.ServerSideCursor helper to work with a single query. Docs.
playhouse.postgres_ext.ServerSideCursor helper to work with a single query. Docs.Model.Meta a5e13bb26d6196dbd24ff228f99ff63d9c046f79.CASE expressions. Docs.Meta option.NOWAIT when issuing SELECT FOR UPDATE queries.execute() in docs.Commits: https://github.com/coleifer/peewee/compare/2.1.4...2.1.5 Released 2013-10-19
Small refactor of some components used to represent expressions (mostly better names).
Commits: https://github.com/coleifer/peewee/compare/2.1.3...2.1.4 Released 2013-08-05
Added the sqlite_ext module, including support for virtual tables, full-text search, user-defined functions, collations and aggregates, as well as mor
sqlite_ext module, including support for virtual tables, full-text search, user-defined functions, collations and aggregates, as well as more granular locking.Commits: https://github.com/coleifer/peewee/compare/2.1.2...2.1.3 Released 2013-06-28
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →