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_table
はtable_name
に変更されましたdb_table_func
はtable_function
に変更されましたorder_by
は削除されました(SELECTクエリに適用されるデフォルトの順序を指定するために使用されていました)。validate_backrefs
は削除されました。逆参照はもはや検証されません。
モデル
BaseModel
はModelBase
に名前変更されました生のモデルデータへのアクセスは、
_data
の代わりに__data__
を使用して行われるようになりました。モデルメソッド
_prepare_instance()
は削除されました。モデルとその関連インデックスを生成するためのDDLステートメントを出力する
sqlall()
メソッドは削除されました。
フィールド
db_column
はcolumn_name
に変更されましたdb_field
クラス属性はfield_type
に変更されました(カスタムフィールドサブクラスを実装する場合に使用されます)model_class
属性はmodel
に変更されましたPrimaryKeyField
はAutoField
に名前変更されましたForeignKeyField
コンストラクタには、以下の変更点があります。rel_model
はmodel
に変更されましたto_field
はfield
に変更されましたrelated_name
はbackref
に変更されました
ManyToManyField
は、メインのpeewee.py
モジュールに含まれるようになりました。拡張フィールド
PasswordField
、PickledField
、AESEncryptedField
が削除されました。
クエリ
JOIN_INNER
、JOIN_LEFT_OUTER
などは、JOIN.INNER
、JOIN.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コードベースに統合されました。