Skip to content

Update dependency peewee to v3#19

Open
renovate[bot] wants to merge 1 commit intomasterfrom
renovate/peewee-3.x
Open

Update dependency peewee to v3#19
renovate[bot] wants to merge 1 commit intomasterfrom
renovate/peewee-3.x

Conversation

@renovate
Copy link
Contributor

@renovate renovate bot commented Sep 20, 2023

Mend Renovate

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
peewee ==2.10.2 -> ==3.17.6 age adoption passing confidence

Release Notes

coleifer/peewee (peewee)

v3.17.6

Compare Source

  • Fix bug in recursive model.delete_instance() when a table contains
    foreign-keys at multiple depths of the graph, #​2893.
  • Fix regression in pool behavior on systems where time.time() returns
    identical values for two connections. This adds a no-op comparable sentinel
    to the heap to prevent any recurrence of this problem, #​2901.
  • Ensure that subqueries inside CASE statements generate correct SQL.
  • Fix regression that broke server-side cursors with Postgres (introduced in
    3.16.0).
  • Fix to ensure compatibility with psycopg3 - the libpq TransactionStatus
    constants are no longer available on the Connection instance.
  • Fix quoting issue in pwiz that could generate invalid python code for
    double-quoted string literals used as column defaults.

View commits

v3.17.5

Compare Source

This release fixes a build system problem in Python 3.12, #​2891.

View commits

v3.17.4

Compare Source

  • Fix bug that could occur when using CASE inside a function, and one or more
    of the CASE clauses consisted of a subquery. Refs #​2873.
    new fix in #​2872 for regression in truthiness of cursor.
  • Fix bug in the conversion of TIMESTAMP type in Sqlite on Python 3.12+.
  • Fix for hybrid properties on subclasses when aliased (#​2888).
  • Many fixes for SqliteQueueDatabase (#​2874, #​2876, #​2877).

View commits

v3.17.3

Compare Source

  • Better fix for #​2871 (extraneous queries when coercing query to list), and

View commits

v3.17.2

Compare Source

  • Full support for psycopg3.
  • Basic support for Sqlite jsonb.
  • Fix bug where calling list(query) resulted in extra queries, #​2871

View commits

v3.17.1

Compare Source

  • Add bitwise and other helper methods to BigBitField, #​2802.
  • Add add_column_default and drop_column_default migrator methods for
    specifying a server-side default value, #​2803.
  • The new star attribute was causing issues for users who had a field named
    star on their models. This attribute is now renamed to __star__. #​2796.
  • Fix compatibility issues with 3.12 related to utcnow() deprecation.
  • Add stricter locking on connection pool to prevent race conditions.
  • Add adapters and converters to Sqlite to replace ones deprecated in 3.12.
  • Fix bug in model_to_dict() when only aliases are present.
  • Fix version check for Sqlite native drop column support.
  • Do not specify a reconnect= argument to ping() if using MySQL 8.x.

View commits

v3.17.0

Compare Source

  • Only roll-back in the outermost @db.transaction decorator/ctx manager if
    an unhandled exception occurs. Previously, an unhandled exception that
    occurred in a nested transaction context would trigger a rollback. The use
    of nested transaction has long been discouraged in the documentation: the
    recommendation is to always use db.atomic, which will use savepoints to
    properly handle nested blocks. However, the new behavior should make it
    easier to reason about transaction boundaries - see #​2767 for discussion.
  • Cover transaction BEGIN in the reconnect-mixin. Given that no transaction
    has been started, reconnecting when beginning a new transaction ensures that
    a reconnect will occur if it is safe to do so.
  • Add support for setting isolation_level in db.atomic() and
    db.transaction() when using Postgres and MySQL/MariaDB, which will apply to
    the wrapped transaction. Note: Sqlite has supported a similar lock_type
    parameter for some time.
  • Add support for the Sqlite SQLITE_DETERMINISTIC function flag. This allows
    user-defined Sqlite functions to be used in indexes and may be used by the
    query planner.
  • Fix unreported bug in dataset import when inferred field name differs from
    column name.

View commits

v3.16.3

Compare Source

  • Support for Cython 3.0.
  • Add flag to ManyToManyField to prevent setting/getting values on unsaved
    instances. This is worthwhile, since reading or writing a many-to-many has no
    meaning when the instance is unsaved.
  • Adds a star() helper to Source base-class for selecting all columns.
  • Fix missing binary types for mysql-connector and mariadb-connector.
  • Add extract() method to MySQL JSONField for extracting a jsonpath.

View commits

v3.16.2

Compare Source

Fixes a longstanding issue with thread-safety of various decorators, including
atomic(), transaction(), savepoint(). The context-managers are
unaffected. See #​2709 for details.

View commits

v3.16.1

Compare Source

  • Add changes required for building against Cython 3.0 and set Cython
    language-level to 3.
  • Ensure indexes aren't added to unindexed fields during introspection, #​2691.
  • Ensure we don't redundantly select same PK in prefetch when using
    PREFETCH_TYPE.JOIN.
  • In Sqlite migrator, use Sqlite's builtin DROP and RENAME column facilities
    when possible. This can be overridden by passing legacy=True flag.

View commits

v3.16.0

Compare Source

This release contains backwards-incompatible changes in the way Peewee
initializes connections to the underlying database driver. Previously, peewee
implemented autocommit semantics on-top of the existing DB-API transactional
workflow. Going forward, Peewee instead places the DB-API driver into
autocommit mode directly.

Why this change?

Previously, Peewee emulated autocommit behavior for top-level queries issued
outside of a transaction. This necessitated a number of checks which had to be
performed each time a query was executed, so as to ensure that we didn't end up
with uncommitted writes or, conversely, idle read transactions. By running the
underlying driver in autocommit mode, we can eliminate all these checks, since
we are already managing transactions ourselves.

Behaviorally, there should be no change -- Peewee will still treat top-level
queries outside of transactions as being autocommitted, while queries inside of
atomic() / with db: blocks are implicitly committed at the end of the
block, or rolled-back if an exception occurs.

How might this affect me?

  • If you are using the underlying database connection or cursors, e.g. via
    Database.connection() or Database.cursor(), your queries will now be
    executed in autocommit mode.
  • The commit= argument is deprecated for the cursor(), execute() and
    execute_sql() methods.
  • If you have a custom Database implementation (whether for a database that
    is not officially supported, or for the purpose of overriding default
    behaviors), you will want to ensure that your connections are opened in
    autocommit mode.

Other changes:

  • Some fixes to help with packaging in Python 3.11.
  • MySQL get_columns() implementation now returns columns in their declared
    order.

View commits

v3.15.4

Compare Source

  • Raise an exception in ReconnectMixin if connection is lost while inside a
    transaction (if the transaction was interrupted presumably some changes were
    lost and explicit intervention is needed).
  • Add db.Model property to reduce boilerplate.
  • Add support for running prefetch() queries with joins instead of subqueries
    (this helps overcome a MySQL limitation about applying LIMITs to a subquery).
  • Add SQL AVG to whitelist to avoid coercing by default.
  • Allow arbitrary keywords in metaclass constructor, #​2627
  • Add a pyproject.toml to silence warnings from newer pips when wheel
    package is not available.

This release has a small helper for reducing boilerplate in some cases by
exposing a base model class as an attribute of the database instance.

v3.15.3

Compare Source

  • Add scalars() query method (complements scalar()), roughly equivalent to
    writing [t[0] for t in query.tuples()].
  • Small doc improvements
  • Fix and remove some flaky test assertions with Sqlite INSERT + RETURNING.
  • Fix innocuous failing Sqlite test on big-endian machines.

View commits

v3.15.2

Compare Source

  • Fix bug where field-specific conversions were being applied to the pattern
    used for LIKE / ILIKE operations. Refs #​2609
  • Fix possible infinite loop when accidentally invoking the __iter__ method
    on certain Column subclasses. Refs #​2606
  • Add new helper for specifying which Model a particular selected column-like
    should be bound to, in queries with joins that select from multiple sources.

View commits

v3.15.1

Compare Source

  • Fix issue introduced in Sqlite 3.39.0 regarding the propagation of column
    subtypes in subqueries.
  • Fix bug where cockroachdb server version was not set when beginning a
    transaction on an unopened database.

View commits

v3.15.0

Compare Source

Rollback behavior change in commit ab43376 (GH #​2026). Peewee will no longer
automatically return the cursor rowcount for certain bulk-inserts. This
should mainly affect users of MySQL and Sqlite who relied on a bulk INSERT
returning the rowcount (as opposed to the cursor's lastrowid). The
rowcount behavior is still available chaining the as_rowcount() method:

v3.14.10

Compare Source

Previous behavior (peewee 3.12 - 3.14.10):

v3.14.9

Compare Source

  • Allow calling table_exists() with a model-class, refs
  • Improve is_connection_usable() method of MySQLDatabase class.
  • Better support for VIEWs with playhouse.dataset.DataSet and sqlite-web.
  • Support INSERT / ON CONFLICT in playhosue.kv for newer Sqlite.
  • Add ArrayField.contained_by() method, a corollary to contains() and
    the contains_any() methods.
  • Support cyclical foreign-key relationships in reflection/introspection, and
    also for sqlite-web.
  • Add magic methods for FTS5 field to optimize, rebuild and integrity check the
    full-text index.
  • Add fallbacks in setup.py in the event distutils is not available.

View commits

v3.14.8

Compare Source

Back-out all changes to automatically use RETURNING for SqliteExtDatabase,
CSqliteExtDatabase and APSWDatabase. The issue I found is that when a
RETURNING cursor is not fully-consumed, any parent SAVEPOINT (and possibly
transaction) would not be able to be released. Since this is a
backwards-incompatible change, I am going to back it out for now.

Returning clause can still be specified for Sqlite, however it just needs to be
done so manually rather than having it applied automatically.

View commits

v3.14.7

Compare Source

Fix bug in APSW extension with Sqlite 3.35 and newer, due to handling of last
insert rowid with RETURNING. Refs #​2479.

View commits

v3.14.6

Compare Source

Fix pesky bug in new last_insert_id() on the SqliteExtDatabase.

View commits

v3.14.4

Compare Source

This release contains an important fix for a regression introduced by commit
ebe3ad5, which affected the way model instances are converted to parameters for
use in expressions within a query. The bug could manifest when code uses model
instances as parameters in expressions against fields that are not
foreign-keys.

The issue is described in #​2376.

View commits

v3.14.3

Compare Source

This release contains a single fix for ensuring NULL values are inserted when
issuing a bulk-insert of heterogeneous dictionaries which may be missing
explicit NULL values. Fixes issue #​2638.

View commits

v3.14.2

Compare Source

This is a small release mainly to get some fixes out.

  • Support for named Check and foreign-key constraints.
  • Better foreign-key introspection for CockroachDB (and Postgres).
  • Register UUID adapter for Postgres.
  • Add fn.array_agg() to blacklist for automatic value coercion.

View commits

v3.14.1

Compare Source

Previous behavior (peewee 3.12 - 3.14.10):

v3.14.0

Compare Source

This release has been a bit overdue and there are numerous small improvements
and bug-fixes. The bugfix that prompted this release is #​2293, which is a
regression in the Django-inspired .filter() APIs that could cause some
filter expressions to be discarded from the generated SQL. Many thanks for the
excellent bug report, Jakub.

  • Add an experimental helper, shortcuts.resolve_multimodel_query(), for
    resolving multiple models used in a compound select query.
  • Add a lateral() method to select query for use with lateral joins, refs
    issue #​2205.
  • Added support for nested transactions (savepoints) in cockroach-db (requires
    20.1 or newer).
  • Automatically escape wildcards passed to string-matching methods, refs #​2224.
  • Allow index-type to be specified on MySQL, refs #​2242.
  • Added a new API, converter() to be used for specifying a function to use to
    convert a row-value pulled off the cursor, refs #​2248.
  • Add set() and clear() method to the bitfield flag descriptor, refs #​2257.
  • Add support for range types with IN and other expressions.
  • Support CTEs bound to compound select queries, refs #​2289.
Bug-fixes
  • Fix to return related object id when accessing via the object-id descriptor,
    when the related object is not populated, refs #​2162.
  • Fix to ensure we do not insert a NULL value for a primary key.
  • Fix to conditionally set the field/column on an added column in a migration,
    refs #​2171.
  • Apply field conversion logic to model-class values. Relocates the logic from
    issue #​2131 and fixes #​2185.
  • Clone node before modifying it to be flat in an enclosed nodelist expr, fixes
    issue #​2200.
  • Fix an invalid item assignment in nodelist, refs #​2220.
  • Fix an incorrect truthiness check used with save() and only=, refs #​2269.
  • Fix regression in filter() where using both *args and **kwargs caused
    the expressions passed as args to be discarded. See #​2293.

View commits

v3.13.3

Compare Source

  • Allow arbitrary keyword arguments to be passed to DataSet constructor,
    which are then passed to the instrospector.
  • Allow scalar subqueries to be compared using numeric operands.
  • Fix bulk_create() when model being inserted uses FK identifiers.
  • Fix bulk_update() so that PK values are properly coerced to the right
    data-type (e.g. UUIDs to strings for Sqlite).
  • Allow array indices to be used as dict keys, e.g. for the purposes of
    updating a single array index value.

View commits

v3.13.2

Compare Source

  • Allow aggregate functions to support an ORDER BY clause, via the addition
    of an order_by() method to the function (fn) instance. Refs #​2094.
  • Fix prefetch() bug, where related "backref" instances were marked as dirty,
    even though they had no changes. Fixes #​2091.
  • Support LIMIT 0. Previously a limit of 0 would be translated into
    effectively an unlimited query on MySQL. References #​2084.
  • Support indexing into arrays using expressions with Postgres array fields.
    References #​2085.
  • Ensure postgres introspection methods return the columns for multi-column
    indexes in the correct order. Fixes #​2104.
  • Add support for arrays of UUIDs to postgres introspection.
  • Fix introspection of columns w/capitalized table names in postgres (#​2110).
  • Fix to ensure correct exception is raised in SqliteQueueDatabase when
    iterating over cursor/result-set.
  • Fix bug comparing subquery against a scalar value. Fixes #​2118.
  • Fix issue resolving composite primary-keys that include foreign-keys when
    building the model-graph. Fixes #​2115.
  • Allow model-classes to be passed as arguments, e.g., to a table function.
    Refs #​2131.
  • Ensure postgres JSONField.concat() accepts expressions as arguments.

View commits

v3.13.1

Compare Source

Fix a regression when specifying keyword arguments to the atomic() or
transaction() helper methods. Note: this only occurs if you were using Sqlite
and were explicitly setting the lock_type= parameter.

View commits

v3.13.0

Compare Source

CockroachDB support added

This will be a notable release as it adds support for
CockroachDB, a distributed, horizontally-scalable
SQL database.

Other features and fixes
  • Allow FOR UPDATE clause to specify one or more tables (FOR UPDATE OF...).
  • Support for Postgres LATERAL join.
  • Properly wrap exceptions raised during explicit commit/rollback in the
    appropriate peewee-specific exception class.
  • Capture original exception object and expose it as exc.orig on the
    wrapped exception.
  • Properly introspect SMALLINT columns in Postgres schema reflection.
  • More flexible handling of passing database-specific arguments to atomic()
    and transaction() context-manager/decorator.
  • Fix non-deterministic join ordering issue when using the filter() API
    across several tables (#​2063).

View commits

v3.12.0

Compare Source

  • Bulk insert (insert_many() and insert_from()) will now return the row
    count instead of the last insert ID. If you are using Postgres, peewee will
    continue to return a cursor that provides an iterator over the newly-inserted
    primary-key values by default. This behavior is being retained by default for
    compatibility. Postgres users can simply specify an empty returning() call
    to disable the cursor and retrieve the rowcount instead.
  • Migration extension now supports altering a column's data-type, via the new
    alter_column_type() method.
  • Added Database.is_connection_usabe() method, which attempts to look at the
    status of the underlying DB-API connection to determine whether the
    connection is usable.
  • Common table expressions include a materialized parameter, which can be
    used to control Postgres' optimization fencing around CTEs.
  • Added BloomFilter.from_buffer() method for populating a bloom-filter from
    the output of a previous call to the to_buffer() method.
  • Fixed APSW extension's commit() and rollback() methods to no-op if the
    database is in auto-commit mode.
  • Added generate_always= option to the IdentityField (defaults to False).

View commits

v3.11.2

Compare Source

  • Implement hash interface for Alias instances, allowing them to be used in
    multi-source queries.

View commits

v3.11.1

Compare Source

  • Fix bug in new _pk / get_id() implementation for models that explicitly
    have disabled a primary-key.

View commits

v3.11.0

Compare Source

  • Fixes #​1991. This particular issue involves joining 3 models together in a
    chain, where the outer two models are empty. Previously peewee would make the
    middle model an empty model instance (since a link might be needed from the
    source model to the outermost model). But since both were empty, it is more
    correct to make the intervening model a NULL value on the foreign-key field
    rather than an empty instance.
  • An unrelated fix came out of the work on #​1991 where hashing a model whose
    primary-key happened to be a foreign-key could trigger the FK resolution
    query. This patch fixes the Model._pk and get_id() interfaces so they
    no longer introduce the possibility of accidentally resolving the FK.
  • Allow Field.contains(), startswith() and endswith() to compare against
    another column-like object or expression.
  • Workaround for MySQL prior to 8 and MariaDB handling of union queries inside
    of parenthesized expressions (like IN).
  • Be more permissive in letting invalid values be stored in a field whose type
    is INTEGER or REAL, since Sqlite allows this.
  • TimestampField resolution cleanup. Now values 0 and 1 will resolve to a
    timestamp resolution of 1 second. Values 2-6 specify the number of decimal
    places (hundredths to microsecond), or alternatively the resolution can still
    be provided as a power of 10, e.g. 10, 1000 (millisecond), 1e6 (microsecond).
  • When self-referential foreign-keys are inherited, the foreign-key on the
    subclass will also be self-referential (rather than pointing to the parent
    model).
  • Add TSV import/export option to the dataset extension.
  • Add item interface to the dataset.Table class for doing primary-key lookup,
    assignment, or deletion.
  • Extend the mysql ReconnectMixin helper to work with mysql-connector.
  • Fix mapping of double-precision float in postgres schema reflection.
    Previously it mapped to single-precision, now it correctly uses a double.
  • Fix issue where PostgresqlExtDatabase and MySQLConnectorDatabase did not
    respect the autoconnect setting.

View commits

v3.10.0

Compare Source

  • Add a helper to playhouse.mysql_ext for creating Match full-text search
    expressions.
  • Added date-part properties to TimestampField for accessing the year, month,
    day, etc., within a SQL expression.
  • Added to_timestamp() helper for DateField and DateTimeField that
    produces an expression returning a unix timestamp.
  • Add autoconnect parameter to Database classes. This parameter defaults to
    True and is compatible with previous versions of Peewee, in which executing
    a query on a closed database would open a connection automatically. To make
    it easier to catch inconsistent use of the database connection, this behavior
    can now be disabled by specifying autoconnect=False, making an explicit
    call to Database.connect() needed before executing a query.
  • Added database-agnostic interface for obtaining a random value.
  • Allow isolation_level to be specified when initializing a Postgres db.
  • Allow hybrid properties to be used on model aliases. Refs #​1969.
  • Support aggregates with FILTER predicates on the latest Sqlite.
Changes
  • More aggressively slot row values into the appropriate field when building
    objects from the database cursor (rather than using whatever
    cursor.description tells us, which is buggy in older Sqlite).
  • Be more permissive in what we accept in the insert_many() and insert()
    methods.
  • When implicitly joining a model with multiple foreign-keys, choose the
    foreign-key whose name matches that of the related model. Previously, this
    would have raised a ValueError stating that multiple FKs existed.
  • Improved date truncation logic for Sqlite and MySQL to make more compatible
    with Postgres' date_trunc() behavior. Previously, truncating a datetime to
    month resolution would return '2019-08' for example. As of 3.10.0, the
    Sqlite and MySQL date_trunc implementation returns a full datetime, e.g.
    '2019-08-01 00:00:00'.
  • Apply slightly different logic for casting JSON values with Postgres.
    Previously, Peewee just wrapped the value in the psycopg2 Json() helper.
    In this version, Peewee now dumps the json to a string and applies an
    explicit cast to the underlying JSON data-type (e.g. json or jsonb).
Bug fixes
  • Save hooks can now be called for models without a primary key.
  • Fixed bug in the conversion of Python values to JSON when using Postgres.
  • Fix for differentiating empty values from NULL values in model_to_dict.
  • Fixed a bug referencing primary-key values that required some kind of
    conversion (e.g., a UUID). See #​1979 for details.
  • Add small jitter to the pool connection timestamp to avoid issues when
    multiple connections are checked-out at the same exact time.

View commits

v3.9.6

Compare Source

  • Support nesting the Database instance as a context-manager. The outermost
    block will handle opening and closing the connection along with wrapping
    everything in a transaction. Nested blocks will use savepoints.
  • Add new session_start(), session_commit() and session_rollback()
    interfaces to the Database object to support using transactional controls in
    situations where a context-manager or decorator is awkward.
  • Fix error that would arise when attempting to do an empty bulk-insert.
  • Set isolation_level=None in SQLite connection constructor rather than
    afterwards using the setter.
  • Add create_table() method to Select query to implement CREATE TABLE AS.
  • Cleanup some declarations in the Sqlite C extension.
  • Add new example showing how to implement Reddit's ranking algorithm in SQL.

View commits

v3.9.5

Compare Source

  • Added small helper for setting timezone when using Postgres.
  • Improved SQL generation for VALUES clause.
  • Support passing resolution to TimestampField as a power-of-10.
  • Small improvements to INSERT queries when the primary-key is not an
    auto-incrementing integer, but is generated by the database server (eg uuid).
  • Cleanups to virtual table implementation and python-to-sqlite value
    conversions.
  • Fixed bug related to binding previously-unbound models to a database using a
    context manager, #​1913.

View commits

v3.9.4

Compare Source

  • Add Model.bulk_update() method for bulk-updating fields across multiple
    model instances. Docs.
  • Add lazy_load parameter to ForeignKeyField. When initialized with
    lazy_load=False, the foreign-key will not use an additional query to
    resolve the related model instance. Instead, if the related model instance is
    not available, the underlying FK column value is returned (behaving like the
    "_id" descriptor).
  • Added Model.truncate_table() method.
  • The reflection and pwiz extensions now attempt to be smarter about
    converting database table and column names into snake-case. To disable this,
    you can set snake_case=False when calling the Introspector.introspect()
    method or use the -L (legacy naming) option with the pwiz script.
  • Bulk insert via insert_many() no longer require specification of the
    fields argument when the inserted rows are lists/tuples. In that case, the
    fields will be inferred to be all model fields except any auto-increment id.
  • Add DatabaseProxy, which implements several of the Database class context
    managers. This allows you to reference some of the special features of the
    database object without directly needing to initialize the proxy first.
  • Add support for window function frame exclusion and added built-in support
    for the GROUPS frame type.
  • Add support for chaining window functions by extending a previously-declared
    window function.
  • Playhouse Postgresql extension TSVectorField.match() method supports an
    additional argument plain, which can be used to control the parsing of the
    TS query.
  • Added very minimal JSONField to the playhouse MySQL extension.

View commits

v3.9.3

Compare Source

  • Added cross-database support for NULLS FIRST/LAST when specifying the
    ordering for a query. Previously this was only supported for Postgres. Peewee
    will now generate an equivalent CASE statement for Sqlite and MySQL.
  • Added EXCLUDED
    helper for referring to the EXCLUDED namespace used with INSERT...ON CONFLICT
    queries, when referencing values in the conflicting row data.
  • Added helper method to the model Metadata class for setting the table name
    at run-time. Setting the Model._meta.table_name directly may have appeared
    to work in some situations, but could lead to subtle bugs. The new API is
    Model._meta.set_table_name().
  • Enhanced helpers for working with Peewee interactively, see doc.
  • Fix cache invalidation bug in DataSet that was originally reported on the
    sqlite-web project.
  • New example script implementing a hexastore.

View commits

v3.9.2

Compare Source

Includes a bugfix for an AttributeError that occurs when using MySQL with the
MySQLdb client. The 3.9.2 release includes fixes for a test failure.

View commits

v3.9.1

Compare Source

Includes a bugfix for an AttributeError that occurs when using MySQL with the
MySQLdb client. The 3.9.2 release includes fixes for a test failure.

View commits

v3.9.0

Compare Source

  • Added new document describing how to use peewee interactively.
  • Added convenience functions for generating model classes from a pre-existing
    database, printing model definitions and printing CREATE TABLE sql for a
    model. See the "use peewee interactively" section for details.
  • Added a __str__ implementation to all Query subclasses which converts the
    query to a string and interpolates the parameters.
  • Improvements to sqlite_ext.JSONField regarding the serialization of data,
    as well as the addition of options to override the JSON serialization and
    de-serialization functions.
  • Added index_type parameter to Field
  • Added DatabaseProxy, which allows one to use database-specific decorators
    with an uninitialized Proxy object. See #​1842 for discussion. Recommend
    that you update any usage of Proxy for deferring database initialization to
    use the new DatabaseProxy class instead.
  • Added support for INSERT ... ON CONFLICT when the conflict target is a
    partial index (e.g., contains a WHERE clause). The OnConflict and
    on_conflict() APIs now take an additional conflict_where parameter to
    represent the WHERE clause of the partial index in question. See #​1860.
  • Enhanced the playhouse.kv extension to use efficient upsert for all
    database engines. Previously upsert was only supported for sqlite and mysql.
  • Re-added the orwhere() query filtering method, which will append the given
    expressions using OR instead of AND. See #​391 for old discussion.
  • Added some new examples to the examples/ directory
  • Added select_from() API for wrapping a query and selecting one or more
    columns from the wrapped subquery. Docs.
  • Added documentation on using row values.
  • Removed the (defunct) "speedups" C extension, which as of 3.8.2 only
    contained a barely-faster function for quoting entities.

Bugfixes

  • Fix bug in SQL generation when there was a subquery that used a common table
    expressions.
  • Enhanced prefetch() and fixed bug that could occur when mixing
    self-referential foreign-keys and model aliases.
  • MariaDB 10.3.3 introduces backwards-incompatible changes to the SQL used for
    upsert. Peewee now introspects the MySQL server version at connection time to
    ensure proper handling of version-specific features. See #​1834 for details.
  • Fixed bug where TimestampField would treat zero values as None when
    reading from the database.

View commits

v3.8.2

Compare Source

Backwards-incompatible changes

  • The default row-type for INSERT queries executed with a non-default
    RETURNING clause has changed from tuple to Model instances. This makes
    INSERT behavior consistent with UPDATE and DELETE queries that specify
    a RETURNING clause. To revert back to the old behavior, just append a call
    to .tuples() to your INSERT ... RETURNING query.
  • Removing support for the table_alias model Meta option. Previously, this
    attribute could be used to specify a "vanity" alias for a model class in the
    generated SQL. As a result of some changes to support more robust UPDATE and
    DELETE queries, supporting this feature will require some re-working. As of
    the 3.8.0 release, it was broken and resulted in incorrect SQL for UPDATE
    queries, so now it is removed.

New features

  • Added playhouse.shortcuts.ReconnectMixin, which can be used to implement
    automatic reconnect under certain error conditions (notably the MySQL error
    2006 - server has gone away).

Bugfixes

  • Fix SQL generation bug when using an inline window function in the ORDER BY
    clause of a query.
  • Fix possible zero-division in user-defined implementation of BM25 ranking
    algorithm for SQLite full-text search.

View commits

v3.8.1

Compare Source

New features

  • Sqlite SearchField now supports the match() operator, allowing full-text
    search to be performed on a single column (as opposed to the whole table).

Changes

  • Remove minimum passphrase restrictions in SQLCipher integration.

Bugfixes

  • Support inheritance of ManyToManyField instances.
  • Ensure operator overloads are invoked when generating filter expressions.
  • Fix incorrect scoring in Sqlite BM25, BM25f and Lucene ranking algorithms.
  • Support string field-names in data dictionary when performing an ON CONFLICT
    ... UPDATE query, which allows field-specific conversions to be applied.
    References #​1815.

View commits

v3.8.0

Compare Source

New features

  • Postgres BinaryJSONField now supports has_key(), concat() and
    remove() methods (though remove may require pg10+).
  • Add python_value() method to the SQL-function helper fn, to allow
    specifying a custom function for mapping database values to Python values.

Changes

  • Better support for UPDATE ... FROM queries, and more generally, more robust
    support for UPDATE and RETURNING clauses. This means that the
    QualifiedNames helper is no longer needed for certain types of queries.
  • The SqlCipherDatabase no longer accepts a kdf_iter parameter. To
    configure the various SQLCipher encryption settings, specify the setting
    values as pragmas when initializing the database.
  • Introspection will now, by default, only strip "_id" from introspected column
    names if those columns are foreign-keys. See #​1799 for discussion.
  • Allow UUIDField and BinaryUUIDField to accept hexadecimal UUID strings as
    well as raw binary UUID bytestrings (in addition to UUID instances, which
    are already supported).
  • Allow ForeignKeyField to be created without an index.
  • Allow multiple calls to cast() to be chained (#​1795).
  • Add logic to ensure foreign-key constraint names that exceed 64 characters
    are truncated using the same logic as is currently in place for long indexes.
  • ManyToManyField supports foreign-keys to fields other than primary-keys.
  • When linked against SQLite 3.26 or newer, support SQLITE_CONSTRAINT to
    designate invalid queries against virtual tables.
  • SQL-generation changes to aid in supporting using queries within expressions
    following the SELECT statement.

Bugfixes

  • Fixed bug in order_by_extend(), thanks @​nhatHero.
  • Fixed bug where the DataSet CSV import/export did not support non-ASCII
    characters in Python 3.x.
  • Fixed bug where model_to_dict would attempt to traverse explicitly disabled
    foreign-key backrefs (#​1785).
  • Fixed bug when attempting to migrate SQLite tables that have a field whose
    column-name begins with "primary_".
  • Fixed bug with inheriting deferred foreign-keys.

View commits

v3.7.1

Compare Source

New features

  • Added table_settings model Meta option, which should be a list of strings
    specifying additional options for CREATE TABLE, which are placed after
    the closing parentheses.
  • Allow specification of on_update and on_delete behavior for many-to-many
    relationships when using ManyToManyField.

Bugfixes

  • Fixed incorrect SQL generation for Postgresql ON CONFLICT clause when the
    conflict_target is a named constraint (rather than an index expression). This
    introduces a new keyword-argument to the on_conflict() method:
    conflict_constraint, which is currently only supported by Postgresql. Refs
    issue #​1737.
  • Fixed incorrect SQL for sub-selects used on the right side of IN
    expressions. Previously the query would be assigned an alias, even though an
    alias was not needed.
  • Fixed incorrect SQL generation for Model indexes which contain SQL functions
    as indexed columns.
  • Fixed bug in the generation of special queries used to perform operations on
    SQLite FTS5 virtual tables.
  • Allow frozenset to be correctly parameterized as a list of values.
  • Allow multi-value INSERT queries to specify columns as a list of strings.
  • Support CROSS JOIN for model select queries.

View commits

v3.7.0

Compare Source

Backwards-incompatible changes

  • Pool database close_all() method renamed to close_idle() to better
    reflect the actual behavior.
  • Databases will now raise InterfaceError when connect() or close() are
    called on an uninitialized, deferred database object.

New features

  • Add methods to the migrations extension to support adding and dropping table
    constraints.
  • Add Model.bulk_create()
    method for bulk-inserting unsaved model instances.
  • Add close_stale() method to the connection pool to support closing stale
    connections.
  • The FlaskDB class in playhouse.flask_utils now accepts a model_class
    parameter, which can be used to specify a custom base-class for models.

Bugfixes

  • Parentheses were not added to subqueries used in function calls with more
    than one argument.
  • Fixed bug when attempting to serialize many-to-many fields which were created
    initially with a DeferredThroughModel, see #​1708.
  • Fixed bug when using the Postgres ArrayField with an array of BlobField.
  • Allow Proxy databases to be used as a context-manager.
  • Fixed bug where the APSW driver was referring to the SQLite version from the
    standard library sqlite3 driver, rather than from apsw.
  • Reflection library attempts to wrap server-side column defaults in quotation
    marks if the column data-type is text/varchar.
  • Missing import in migrations library, which would cause errors when
    attempting to add indexes whose name exceeded 64 chars.
  • When using the Postgres connection pool, ensure any open/pending transactions
    are rolled-back when the connection is recycled.
  • Even more changes to the setup.py script. In this case I've added a
    helper function which will reliably determine if the SQLite3 extensions can
    be built. This follows the approach taken by the Python YAML package.

View commits

v3.6.4

Compare Source

Take a whole new approach, following what simplejson does. Allow the
build_ext command class to fail, and retry without extensions in the event we
run into issues building extensions. References #​1676.

View commits

v3.6.3

Compare Source

Add check in setup.py to determine if a C compiler is available before
building C extensions. References #​1676.

View commits

v3.6.2

Compare Source

Use ctypes.util.find_library to determine if libsqlite3 is installed.
Should fix problems people are encountering installing when SQLite3 is not
available.

View commits

v3.6.1

Compare Source

Fixed issue with setup script.

View commits

v3.6.0

Compare Source

  • Support for Python 3.7, including bugfixes related to new StopIteration
    handling inside of generators.
  • Support for specifying ROWS or RANGE window frame types. For more
    information, see the new frame type documentation.
  • Add APIs for user-defined window functions if using pysqlite3
    and sqlite 3.25.0 or newer.
  • TimestampField now uses 64-bit integer data-type for storage.
  • Added support to pwiz and playhouse.reflection to enable generating
    models from VIEWs.
  • Added lower-level database API for introspecting VIEWs.
  • Revamped continuous integration setup for better coverage, including 3.7 and
    3.8-dev.
  • Allow building C extensions even if Cython is not installed, by distributing
    pre-generated C source files.
  • Switch to using setuptools for packaging.

View commits

v3.5.2

Compare Source

  • New guide to using window functions in Peewee.
  • New and improved table name auto-generation. This feature is not backwards
    compatible, so it is disabled by default. To enable, set
    legacy_table_names=False in your model's Meta options. For more details,
    see table names
    documentation.
  • Allow passing single fields/columns to window function order_by and
    partition_by arguments.
  • Support for FILTER (WHERE...) clauses with window functions and aggregates.
  • Added IdentityField class suitable for use with Postgres 10's new identity
    column type. It can be used anywhere AutoField or BigAutoField was being
    used previously.
  • Fixed bug creating indexes on tables that are in attached databases (SQLite).
  • Fixed obscure bug when using prefetch() and ModelAlias to populate a
    back-reference related model.

View commits

v3.5.1

Compare Source

New features

  • New documentation for working with relationships
    in Peewee.
  • Improved tests and documentation for MySQL upsert functionality.
  • Allow database parameter to be specified with ModelSelect.get() method.
    For discussion, see #​1620.
  • Add QualifiedNames helper to peewee module exports.
  • Add temporary= meta option to support temporary tables.
  • Allow a Database object to be passed to constructor of DataSet helper.

Bug fixes

  • Fixed edge-case where attempting to alias a field to it's underlying
    column-name (when different), Peewee would not respect the alias and use the
    field name instead. See #​1625 for details and discussion.
  • Raise a ValueError when joining and aliasing the join to a foreign-key's
    object_id_name descriptor. Should prevent accidentally introducing O(n)
    queries or silently ignoring data from a joined-instance.
  • Fixed bug for MySQL when creating a foreign-key to a model which used the
    BigAutoField for it's primary-key.
  • Fixed bugs in the implementation of user-defined aggregates and extensions
    with the APSW SQLite driver.
  • Fixed regression introduced in 3.5.0 which ignored custom Model __repr__().
  • Fixed regression from 2.x in which inserting from a query using a SQL() was
    no longer working. Refs #​1645.

View commits

v3.5.0

Compare Source

Backwards-incompatible changes


Configuration

📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate bot force-pushed the renovate/peewee-3.x branch from bd089cb to 17b9faf Compare October 13, 2023 16:20
@renovate renovate bot force-pushed the renovate/peewee-3.x branch from 17b9faf to 4b4b244 Compare February 5, 2024 15:42
@renovate renovate bot force-pushed the renovate/peewee-3.x branch 2 times, most recently from 30a66f1 to 76a0359 Compare April 17, 2024 16:37
@renovate renovate bot force-pushed the renovate/peewee-3.x branch from 76a0359 to 1072595 Compare May 10, 2024 16:51
@renovate renovate bot force-pushed the renovate/peewee-3.x branch from 1072595 to ab115ca Compare July 6, 2024 17:13
@sonarqubecloud
Copy link

sonarqubecloud bot commented Mar 5, 2025

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants