mysql系列问答题_mysql的问题

CherryPy不会为你决定使用什么工具。这取决于你选择最适合你和你的任务的工具。因此CherryPy不建立任何数据库连接,你的cherrypy.thread_data.db,这是你的工作。在

就我个人而言,我在CherryPy应用程序中使用了相同的职责分离概念,比如MVC,所以有两种可能的方法来实现你想要的。在

设计说明

我想指出的是,线程映射数据库连接的简单解决方案,至少在MySQL中,在实践中运行得非常好。而且,更为老式的连接池的额外复杂性可能并不必要。在

然而,也有不可忽视的地方。您的数据库连接可能被终止、丢失或处于任何其他不允许您对其进行查询的状态。在这种情况下,必须重新连接。在

还要注意避免线程之间的连接共享,因为这会导致难以调试的错误和Python崩溃。在示例代码中,它可能与服务调度器及其缓存相关。在

自举阶段

在设置配置的代码中,安装CherryPy应用程序等

引导.py# ...

import MySQLdb as mysql

def _onThreadStart(threadIndex):

cherrypy.thread_data.db = mysql.connect(**config['database'])

cherrypy.engine.subscribe('start_thread', _onThreadStart)

# useful for tests to have db connection on current thread

_onThreadStart(-1)

模型.py

^{pr2}$

几年前,我写了一个完整的CherryPy部署教程cherrypy-webapp-skeleton。您可以查看代码,因为演示应用程序正是使用这种方法。在

模型属性

为了减少代码耦合并避免导入周期,最好将所有与数据库相关的代码移到模型模块中。它可能包括初始连接查询,如设置操作时区、使MySQLdb转换器能够识别timzeone等

模型.pyclass Model(object):

def __init__(self):

try:

# reconnect if needed

self._db.ping(True)

except mysql.OperationalError:

pass

@property

def _db(self):

'''Thread-mapped connection accessor'''

if not hasattr(cherrypy.thread_data, 'db'):

cherrypy.thread_data.db = mysql.connect(**config['database'])

return cherrypy.thread_data.db

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值