
こんにちは、habralyudi。 昨日、人気のあるPythonのWebフレームワークであるDjangoのブログで、1.6という新しいバージョンのリリース
に関するニュースがありました。
すべての革新の完全なリスト、および変更に関する情報(後方互換性のないものも含む)は
、リリースノートに伝統的に記載され
ています 。 私の考えでは、今回は開発者がデータベースの操作に重点を置いていました。
このニュース記事では、私の意見では、主な変更点に注目したいと思います。
トランザクションを操作する
1.6では、トランザクションを操作するための新しいAPIが登場しました。 このバージョンから、
django.db.transactionある
django.db.transactionモジュールの
autocommit() 、
commit_on_success()および
commit_manually()関数
django.db.transaction廃止されたと見なされ、1.8まで互換性を維持します。 それらは
atomic()置き換えられます。
ここでの主なロジックは次のとおりです:以前、キーポイントはトランザクションコミットを操作するときの動作制御メカニズムでした-自動コミット(つまり、各SQLクエリはトランザクションを開始して自動的にコミットします)または手動コミット(
COMMIT; SQLクエリは独立して送信されます) このメカニズムは、独立したトランザクションの場合は非常にうまく機能しましたが、廃止された関数をネストして使用する場合、結果は不正確になる可能性があります。 たとえば、2つの
commit_on_success()ブロックが相互にネストされている場合、内部ブロックの実行結果がトランザクションの観点から外部ブロックのアトミック性を壊してしまいます。
これから何が起こるか:最初に、jungaはデフォルトで自動コミットモードをオンにします。これは
PEP 249に違反して、注目に値します。 次に、トランザクションを操作するための唯一のメカニズムは
atomic() 。これはネストを恐れません。 外部ブロックの場合はトランザクションで動作し、ネストされたブロックの場合はSQLストレージ
ポイントで動作します。 また、
TransactionMiddleware代わりに、構成定数
ATOMIC_REQUESTS 。その値を
True (デフォルト値は
False )に設定すると、djangoは1つのトランザクションで1つのHTTP要求を処理しようとします。 つまり 要求は問題なく実行されました-コミット済み、いいえ-ロールバックされました。
atomic()は、デコレータまたはコンテキストマネージャとして使用できることに注意してください。
from django.db import transaction
より詳細な説明は、いつものよう
に、ドキュメントで利用可能です。
永続的なデータベース接続
もちろん、これはプル接続ではありません。 これらは、アプリケーションが実行されているスレッドによって分離されます。 ただし、これは、パフォーマンスの点で、すべてのHTTP要求でデータベースに常時接続するよりもはるかに優れています。 接続の存続期間は、構成定数
CONN_MAX_AGEによって制御されます。
テスト
1.6では、新しい
django.test.runner.DiscoverRunnerテスト
django.test.runner.DiscoverRunner 。これは、
unittest2からのテストでモジュール検索ロジックを使用し
unittest2 。 これで、テストを含むファイルの名前が
test*.pyマスクと一致する場合、テストを任意のモジュールに配置できます。
ただし、同時に、
models.pyおよび
tests/__init__.pyからの
tests/__init__.pyが見つかったため、それらは起動されません(以前のバージョンの動作とは異なります)。 最も簡単な解決策は、それらの名前を
test_models.pyや
tests/test.pyなどに変更することです。 また、ドキュメントは自動的にロードされなくなります。 しかし、
unittestドキュメントの
指示に従ってそれらを元に戻すことは難しくありません。
ところで、管理チームの
./manage.py testには
--patternオプションがあり、テストでファイルを検索するためにマスクを変更できることを指定します。
経営陣チェック
django-admin.py checkコマンドを使用すると、プロジェクトまたはアプリケーションと現在のバージョンのジャングルとの互換性を確認できるようになり、互換性のない場所が見つかった場合にアラートが表示されます。 このコマンドは、フレームワークの新しいバージョンへの移行に役立つと想定されています。
ちなみに、1.6はジャングルの最新リリースであり、Pythonバージョン2.6を引き続きサポートしています。 次のリリースから、少なくとも2.7のPythonが必要になります。
ORMの改善
QuerySetは、
first()および
last()メソッドの形式の構文シュガー、および
latest()に加えて
earliest()メソッドをサポートするようになりました。
ORMは、日付や時刻を持つフィールドを検索するときに、以前に追加された
year 、
month dayに加えて、
hour 、
minute secondをサポートするようになりました。
まあ、伝統的な調査。 割合に関心があるため、複数のバージョンを使用する場合は、メインの開発が行われているバージョンを示すのが理にかなっています。