6

Django、SQLAlchemy、および MySQL で動作する接続プールを持っている人はいますか?

私はこのチュートリアル(http://node.to/wordpress/2008/09/30/another-database-connection-pool-solution-for-django-mysql/)を使用しましたが、うまくいきましたが、私が抱えている問題はいつでもDjango 固有の変換が使用されていないため、timedelta に変換されている時間フィールドを戻します。

django/db/backends/mysql/base.py からの変換コード

django_conversions = conversions.copy()
django_conversions.update({
FIELD_TYPE.TIME: util.typecast_time,
FIELD_TYPE.DECIMAL: util.typecast_decimal,
FIELD_TYPE.NEWDECIMAL: util.typecast_decimal,

}))

記事の接続コード:

if settings.DATABASE_HOST.startswith('/'):
            self.connection = Database.connect(port=kwargs['port'], 
                                               unix_socket=kwargs['unix_socket'], 
                                               user=kwargs['user'], 
                                               db=kwargs['db'], 
                                               passwd=kwargs['passwd'], 
                                               use_unicode=kwargs['use_unicode'], 
                                               charset='utf8')
        else:
            self.connection = Database.connect(host=kwargs['host'], 
                                               port=kwargs['port'], 
                                               user=kwargs['user'], 
                                               db=kwargs['db'], 
                                               passwd=kwargs['passwd'], 
                                               use_unicode=kwargs['use_unicode'], 
                                               charset='utf8')
4

1 に答える 1

1

Django トランクで、django/db/ init .py を編集し、次の行をコメントアウトします。

シグナル.request_finished.connect(close_connection)

このシグナル ハンドラーにより、すべての要求の後にデータベースから切断されます。これを行うことのすべての副作用がどうなるかはわかりませんが、リクエストのたびに新しい接続を開始しても意味がありません。お気づきのように、パフォーマンスが低下します。

もう 1 つの必要な変更は、django/middleware/transaction.py にあります。2 つの transaction.is_dirty() テストを削除し、常に commit() または rollback() を呼び出します。それ以外の場合、データベースから読み取るだけの場合、トランザクションをコミットしません。これにより、閉じる必要があるロックが開いたままになります。

于 2012-05-25T03:47:37.317 に答える