3.0における変更点

このドキュメントでは、2.xから3.xに移行する際に注意すべき変更点について説明します。

後方互換性のない変更

可能な限り後方互換性を維持するように努めました。変更されたAPIの中には、DeprecationWarning を発生させるものがあります。

データベース

  • get_conn()Database.connection() に変更されました。

  • get_cursor()Database.cursor() に変更されました。

  • execution_context() は、データベースインスタンスをコンテキストマネージャーとして使用することで置き換えられました。

  • トランザクションなしの接続コンテキストの場合は、Database.connection_context() を使用してください。

  • Database.create_tables()Database.drop_tables()、そして Model.create_table()Model.drop_table() はすべて、デフォルトで safe=True になっています(create_table は存在しない場合は作成し、drop_table は存在する場合は削除します)。

  • connect_kwargs 属性は connect_params に名前変更されました。

  • カスタムフィールドタイプの定義の初期化パラメータが fields から field_types に変更されました。

モデルのメタオプション

  • db_tabletable_name に変更されました

  • db_table_functable_function に変更されました

  • order_by は削除されました(SELECTクエリに適用されるデフォルトの順序を指定するために使用されていました)。

  • validate_backrefs は削除されました。逆参照はもはや検証されません。

モデル

  • BaseModelModelBase に名前変更されました

  • 生のモデルデータへのアクセスは、_data の代わりに __data__ を使用して行われるようになりました。

  • モデルメソッド _prepare_instance() は削除されました。

  • モデルとその関連インデックスを生成するためのDDLステートメントを出力する sqlall() メソッドは削除されました。

フィールド

  • db_columncolumn_name に変更されました

  • db_field クラス属性は field_type に変更されました(カスタムフィールドサブクラスを実装する場合に使用されます)

  • model_class 属性は model に変更されました

  • PrimaryKeyFieldAutoField に名前変更されました

  • ForeignKeyField コンストラクタには、以下の変更点があります。

    • rel_modelmodel に変更されました

    • to_fieldfield に変更されました

    • related_namebackref に変更されました

  • ManyToManyField は、メインの peewee.py モジュールに含まれるようになりました。

  • 拡張フィールド PasswordFieldPickledFieldAESEncryptedField が削除されました。

クエリ

JOIN_INNERJOIN_LEFT_OUTER などは、JOIN.INNERJOIN.LEFT_OUTER などになりました。

クエリ結果ラッパーの実装を含むC拡張機能は削除されました。

さらに、Select.aggregate_rows() が削除されました。このヘルパーは、左結合クエリの重複を排除し、モデルとそのリレーションを反復処理する際の効率性を高めるために使用されていました。実際には、コードの複雑さと、その限られた有用性から、これを廃止することにしました。代わりに、prefetch() を使用して同じ結果を得ることができます。

  • Select クエリの属性 _select_returning に変更されました

  • naive() メソッドは objects() になりました。これはデフォルトでモデルクラスをコンストラクタとして使用しますが、代替コンストラクタとして任意の呼び出し可能オブジェクトを受け入れます。

  • annotate() クエリメソッドはサポートされなくなりました。

Case() ヘルパーは、playhouse.shortcuts モジュールからメインのpeeweeモジュールに移動しました。

cast() メソッドはもはや関数ではなく、すべてのカラムのようなオブジェクトのメソッドになりました。

InsertQuery.return_id_list() メソッドは、_WriteQuery.returning() を使用する、より一般的なパターンに置き換えられました。

InsertQuery.upsert() メソッドは、より一般的で柔軟な Insert.on_conflict() メソッドに置き換えられました。

prefetch() を使用する場合、収集されたインスタンスは、外部キーの backref と同じ属性に格納されます。以前は、結合されたインスタンスに (backref)_prefetch を使用してアクセスしていました。

構成可能なSQL文字列を作成するために使用される SQL オブジェクトは、2番目のパラメータとしてリスト/タプルパラメータを期待するようになりました。

削除された拡張機能

以下の拡張機能は、playhouse には含まれなくなりました。

  • berkeleydb

  • csv_utils

  • djpeewee

  • gfk

  • kv

  • pskel

  • read_slave

SQLite拡張

SQLite拡張モジュールのVirtualModelクラスは、わずかに異なるMetaオプションを受け入れます。

  • arguments - 仮想テーブルで定義されているカラムの後に追加される任意の引数を指定するために使用されます。文字列のリストである必要があります。

  • extension_module (変更なし)

  • options (extension_optionsを置き換えます) - カラムとargumentsの後に表示される仮想テーブルの任意のオプション。

  • prefix_arguments - 仮想テーブル宣言の引数またはカラムの前に表示されるべき文字列のリスト。

そのため、仮想テーブルのモデルを宣言する場合、おおよそ次のように構築されます。

CREATE VIRTUAL TABLE "table name" USING extension_module (
    prefix arguments,
    field definitions,
    arguments,
    options)

PostgreSQL拡張

PostgresqlExtDatabaseは、デフォルトではhstore拡張を登録しなくなりました。3.0以降でhstore拡張を使用するには、データベースオブジェクトを初期化するときにregister_hstore=Trueを渡します。

シグナル拡張

post_initシグナルは削除されました。

新機能

クエリビルダーは、より柔軟で強力になるように、根本から書き直されました。クエリを構築するための汎用的な、低レベルAPIが追加されました。

SQLite

多くのSQLite固有の機能が、playhouse.sqlite_extモジュールからpeeweeに移動されました。たとえば、

  • ユーザー定義関数、集約、照合、およびテーブル関数。

  • 拡張機能の読み込み。

  • プラグマの指定。

詳細については、「SQLiteの使用」セクション「SQLite拡張」ドキュメントを参照してください。

SQLite拡張

sqlite-vtfuncの仮想テーブル実装は、peeweeコードベースに統合されました。

  • SQLiteオンラインバックアップAPIのサポート。

  • Murmurhash実装が修正されました。

  • BM25ランキングコードのいくつかの小さな問題が対処されました。

  • ハッシュとランキングのための多数のユーザー定義関数が含まれるようになりました。

  • BloomFilter実装。

  • インクリメンタルBlob I/Oサポート。

  • 更新、コミット、およびロールバックフックのサポート。

  • LSMTable実装は、lsm1拡張をサポートします。