`
san_yun
  • 浏览: 2639453 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

让Django支持数据库长连接

 
阅读更多

原文:http://www.cnblogs.com/Alexander-Lee/archive/2011/11/12/django_long_connection.html

 

书接上回 

上回我们说到:《在生产系统使用Tornado WebServer来代替FastCGI加速你的Django应用

那么现在很流行用一些高性能的nonblock的app server来host Django的应用,这些Server可以看做是一个单进程单线程的程序,然后用nginx在前端反向代理并且负载均衡到N多个后端工作进城来充分利用多 CPU的性能,当然这部分的配置工作在上回已经说得很清楚了。但是对于Django来说有一个问题。因为Django的数据库连接是在查询的时候实时创建 的,用完就会关掉,这样就会频繁的开闭连接。但是对于Tornado这种Server来说这种方式是低效的。这种Server最高效的工作模式是每个进程 开启一个连接,并长期保持不关闭。本文的目的就是尝试使Django改变一贯的作风,采用这种高效的工作模式。本文基于Django1.3的版本,如果是 低版本可以稍加更改一样可以使用。

Django的数据库可以通过配置使用专门定制的Backend,我们就从这里入手。

首先我们看看Django自带的Backend是如何实现的。在Django官网上可以看到自带MySql的Package结构,可以点击 此处  前往瞻仰。

通观源码我们可以发现,Django基本上是封装了MySQLdb的Connection和Cursor这两个对象。而且重头实现整个 Backend既不实际而且也不能从根本上解决问题。所以我们可以换一个思路。所有的数据库操作都是从获取Connection对象开始的,而获取 Connection对象只有一个入口,就是MySQLdb.connect这个函数。所以我们只需要包装MySQLdb这个模块,用我们自己的 connect方法替代原本的,这样就从根源上解决了问题。我们在包装器内部维护MySQLdb的Connection对象,使其保持长连接,每次 connect被调用的时候判断一下,如果连接存在就返回现有连接,不就完美了吗?所以我们可以分分钟写下第一个解决方案:

分享到:
评论

相关推荐

    django 数据库连接模块解析及简单长连接改造方法

    在进行django数据库连接模块解析及简单长连接改造方法的讨论前,首先需了解django框架中数据库连接管理的基本原理。Django使用ORM(对象关系映射)来与数据库进行交互,这允许开发者使用Python代码来操作数据库,而...

    django 连接数据库出现1045错误的解决方式

    在开发过程中,你可能还会遇到数据库连接丢失或在远程服务器上部署Django项目时同步数据库报错的情况。确保正确配置数据库连接参数、检查网络连接、以及遵循服务器安全策略都是解决这些问题的关键步骤。 总之,正确...

    python 连接达梦数据库

    Python 连接达梦数据库可以用于各种应用程序,例如,使用 Django 进行网站开发,使用 Python 做后端。可以通过查看达梦数据库的文档和社区支持来获取更多信息。 Python 连接达梦数据库需要按照一定的步骤进行,...

    Python-Django与MongoDB数据库的连接器

    `Django-Dongo`就是这样一个工具,它为Django提供了连接到MongoDB的能力,让Django能够无缝地使用非关系型数据库。 Django-Django,也称为Djongo,是由nesdis公司开发的一个库,允许Django与MongoDB进行交互。这个...

    python使用Django库向mysql数据库插入数据

    在Python开发领域,Django是一个强大的Web框架,它支持快速构建高效、可维护的网站应用。结合MySQL数据库,我们可以创建稳健的数据存储系统。本教程将详细介绍如何使用Django与MySQL协同工作,实现数据的插入操作。 ...

    PythonDjango支持像PostgresCitus这样的分布式多租户数据库

    为了在Django项目中使用Citus,我们需要安装`citus` PostgreSQL扩展,并在Django的数据库配置中指定Citus连接。配置文件可能如下所示: ```python DATABASES = { 'default': { 'ENGINE': 'django.db.backends....

    Django数据库内省工具通过数据表名就可以动态创建一个即时可用的Djangomodels对象

    接着,我们可以使用`connections`来获取数据库连接,然后调用`introspection`模块中的方法来获取表的信息: ```python db_name = 'default' # 这里替换为你的数据库名 connection = connections[db_name] ...

    Django切换MySQL数据库.rar

    在设置好数据库连接后,你需要确保你的环境安装了支持MySQL的Django后端。Django本身并不包含MySQL的后端,所以你需要安装`mysqlclient`或`pymysql`库。可以使用pip进行安装: ```bash pip install mysqlclient # ...

    Django引用ztree实现数据库表导入树状目录

    Django支持多种数据库,包括MySQL。通过配置settings.py文件中的DATABASES设置,我们可以将Django项目连接到MySQL数据库。在本例中,我们需要从数据库中读取数据表,这可以通过Django的ORM(对象关系映射)系统实现...

    python电脑控制手机端应用Django源码数据库演示.zip

    通过简单的配置,如设置环境变量、数据库连接等,你就能将这个系统部署并运行起来。 【标签】:“django 毕业设计 Python” “django”标签表明此项目的核心技术是Django框架,而“Python”标签则强调了整个项目是...

    Django 连接sql server数据库的方法

    5. 测试连接:为了确保数据库连接无误,可以编写简单的视图来测试连接是否成功,或者使用Django的管理后台来查看是否可以正常访问数据库。 由于SQL Server是一个商业产品,并且是闭源的,相较于开源的数据库系统,...

    django-postgresql 数据库驱动

    Django支持多种数据库,包括MySQL、SQLite、Oracle和PostgreSQL。要在Django项目中使用PostgreSQL,首先需要在`settings.py`文件中的`DATABASES`配置中指定数据库引擎为`'django.db.backends.postgresql'`或`'django...

    python建站django框架与数据库交互的简单学习代码

    Django支持多种数据库,包括SQLite、MySQL、PostgreSQL等。默认情况下,Django使用SQLite,这是轻量级且易于上手的。在settings.py文件中,你可以配置DATABASES变量来指定使用的数据库。 2. 模型(Model): 在...

    使用Django连接Mysql数据库步骤

    由于Django默认不支持pymysql,我们需要告诉Django使用它。在你的Django项目的`__init__.py`文件中添加以下代码: ```python import pymysql pymysql.install_as_MySQLdb() ``` 这行代码会使得Django认为pymysql是...

    在Django中使用PostgreSQL数据库2

    如果没有任何错误提示,说明数据库连接成功。 8. **操作数据库**:现在你可以使用Django ORM(对象关系映射)来创建、查询和操作数据库。例如,创建模型,同步数据库结构,或者执行SQL查询。使用`python manage.py ...

    Django连接数据库并实现读写分离过程解析

    为了提升应用性能,Django允许开发者通过数据库连接配置和数据库路由实现读写分离。接下来,我们将详细探讨如何在Django项目中实现数据库的连接、配置以及读写分离。 首先,配置Django项目连接数据库是读写分离的第...

    django数据库自动重连的方法实例

    Django数据库自动重连的一个常见问题是当数据库连接因为长时间无操作(默认由MySQL的`wait_timeout`参数设定)而被关闭。在Django默认的数据库连接池中,如果连接丢失,它可能不会自动尝试重新建立连接,这可能导致...

    django 多数据库配置教程

    这时,我们就需要在Django项目中配置多个数据库连接。 #### 2. 修改settings.py配置 在Django项目的settings.py文件中配置DATABASES字典,以定义项目将要使用的数据库。这个字典中至少包含一个键为'default'的条目...

Global site tag (gtag.js) - Google Analytics