2009-03-20 26 views
6

Django、SQLAlchemy、MySQLで誰かが接続プールを使用していますか?Django接続プーリングと時刻フィールド

このチュートリアル(http://node.to/wordpress/2008/09/30/another-database-connection-pool-solution-for-django-mysql/)は素晴らしい機能を果たしましたが、Django固有のコンバージョンが使用されていないため、タイムフィールドに戻すたびにTimedeltaに変換されます。

物品からジャンゴ/ DB /バックエンド/ 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, 

})

接続コードから変換コード:Djangoのトランク内

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') 
+1

Djangoには独自のORMがあります。手動で設定しない限り、SQlAlchemyは使用しません。 –

答えて

1

、編集ジャンゴに/ db/init .pyおよびコメント行:

signals.request_finished.connect(close_connection)

このシグナルハンドラは、リクエストごとにデータベースから切断されます。私はこれを行うことの副作用のすべてが何であるかはわかりませんが、リクエストごとに新しい接続を開始するのは意味がありません。あなたが気付いたように、それはパフォーマンスを破壊します。

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

関連する問題