【问题标题】:Django connection pooling and time fieldsDjango 连接池和时间字段
【发布时间】:2010-10-14 15:34:49
【问题描述】:

有没有人使用 Django、SQLAlchemy 和 MySQL 实现连接池?

我使用了本教程 (http://node.to/wordpress/2008/09/30/another-database-connection-pool-solution-for-django-mysql/),效果很好,但我遇到的问题是,每当我带回一个时间字段时,它就会被转换为时间增量,因为没有使用 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 有自己的 ORM,它不使用 SQlAlchemy,除非你手动设置。

标签: mysql django sqlalchemy connection-pooling


【解决方案1】:

在 Django 主干中,编辑 django/db/init.py 并注释掉该行:

signals.request_finished.connect(close_connection)

此信号处理程序会导致它在每次请求后断开与数据库的连接。我不知道这样做的所有副作用会是什么,但是在每次请求之后启动新连接没有任何意义;正如您所注意到的,它会破坏性能。

另一个必要的更改是在 django/middleware/transaction.py 中;删除两个 transaction.is_dirty() 测试并始终调用 commit() 或 rollback()。否则,如果它只从数据库中读取,它将不会提交事务,这将使锁处于打开状态,而应该关闭。

【讨论】:

    猜你喜欢
    • 2012-09-14
    • 2015-10-02
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多