Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python cherrypy mvc与mysql问题_Python_Mysql_Cherrypy - Fatal编程技术网

Python cherrypy mvc与mysql问题

Python cherrypy mvc与mysql问题,python,mysql,cherrypy,Python,Mysql,Cherrypy,使用Cherrypy/MySQL设置MVC设计时出现问题。以下是设置:(假设所有导入都正确) ##controller.py 类用户(对象): 定义初始化(自): self.model=model.User() @樱桃树 def索引(自): 返回“显示用户主页的一些HTML” ##model.py 类模型(对象): _db=无 定义初始化(自): self.\u db=cherrypy.thread\u data.db 类别用户(型号): def getuser(自我、电子邮件): #使用_db

使用Cherrypy/MySQL设置MVC设计时出现问题。以下是设置:(假设所有导入都正确)

##controller.py
类用户(对象):
定义初始化(自):
self.model=model.User()
@樱桃树
def索引(自):
返回“显示用户主页的一些HTML”
##model.py
类模型(对象):
_db=无
定义初始化(自):
self.\u db=cherrypy.thread\u data.db
类别用户(型号):
def getuser(自我、电子邮件):
#使用_db获取用户并返回结果
##service.py
类UserService(对象):
定义初始化(自):
self.\u model=model.User()
def GET(自我、电子邮件):
返回self.\u model.getuser(电子邮件)
##启动服务器
user=controller.user()
user.service=service.UserService()
cherrypy.tree.mount(用户'/user',self.config)
#app.merge(self.config)
cherrypy.engine.subscribe(“启动线程”,self.\u启动)
自启动(-1)
def_onThreadStart(自,线程索引):
cherrypy.thread_data.db=mysql.connect(**self.config[“database”])
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
cherrypy.engine.start()
cherrypy.engine.block()
上述代码在model.py中的以下行有错误:cherrypy.thread_data.db。 我得到:

不知道为什么,你能给我指一下正确的方向吗?我可以获取连接,并在用户索引处从controller.py获取信息,但不能在model.py中?
请帮忙。。谢谢。

CherryPy不会为您决定使用什么工具。这取决于你选择最适合你和你的任务的工具。因此,CherryPy不设置任何数据库连接,这是您的工作

就我个人而言,我对我的CherryPy应用程序使用了相同的责任分离概念,类似于MVC,因此有两种可能的方法来实现你想要的

设计说明 我想指出的是,线程映射数据库连接的简单解决方案,至少在MySQL的情况下,在实践中效果非常好。而且,可能不需要更多老式连接池的额外复杂性

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

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

自举阶段 在设置配置、装载CherryPy应用程序等的代码中

bootstrap.py

model.py

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

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

model.py

AttributeError: '_ThreadData' object has no attribute 'db' 
# ...

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)
import cherrypy
import MySQLdb as mysql


class Model(object):
  '''Your abstract model'''

  _db = None


  def __init__(self):
    self._db = cherrypy.thread_data.db

    try:
      # reconnect if needed
      self._db.ping(True)
    except mysql.OperationalError:
      pass
class 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