簡體   English   中英

Django 連接池和時間字段

[英]Django connection pooling and time fields

有沒有人使用 Django、SQLAlchemy 和 MySQL 進行連接池?

我使用了本教程( http://node.to/wordpress/2008/09/30/another-database-connection-pool-solution-for-django-mysql/ )效果很好但我遇到的問題是我帶回了一個時間字段,它正在轉換為 timedelta,因為沒有使用 Django 特定的轉換。

來自 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')

在 Django 主干中,編輯 django/db/ init .py 並注釋掉該行:

信號.request_finished.connect(close_connection)

此信號處理程序導致它在每次請求后斷開與數據庫的連接。 我不知道這樣做的所有副作用是什么,但是在每次請求后開始新連接沒有任何意義; 正如您所注意到的,它會破壞性能。

另一個必要的更改是在 django/middleware/transaction.py; 刪除兩個 transaction.is_dirty() 測試並始終調用 commit() 或 rollback()。 否則,如果它只從數據庫中讀取,它將不會提交事務,這將使應該關閉的鎖處於打開狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM