首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Torndb (错误:根:在本地主机上连接到MySQL的错误)

问Torndb (错误:根:在本地主机上连接到MySQL的错误)
EN

Stack Overflow用户
提问于 2013-03-03 18:59:51
回答 1查看 976关注 0票数 0

我正试图使用tor非典/torndb开发一个web应用程序,并且在数据库交互中遇到了一些问题。我已经写了一个“数据库”类,它包装torndb,以便为我的web应用程序提供一些常见的数据库功能。当从我编写的数据库类调用任何方法时,到数据库的连接似乎都有问题:

错误:根:在本地主机上连接到MySQL的错误

我的构造函数打开连接,所以我对为什么在连接打开后看到这条消息感到有点困惑。我希望这是我所不理解的范围界定和/或GC问题。目标是创建数据库对象一次,因此在服务器的整个生命周期中只有一个连接,数据库被存储

下面的代码片段确实按预期工作,这可能导致了范围确定或GC问题:

代码语言:javascript
复制
#!/usr/bin/python

import torndb

class Database:

def __init__(self):

    try:
        self.__dbh = torndb.Connection(
                'localhost',
                'mydb',
                user = 'myuser',
                password = 'mypass')
    except Exception as e:
        print e


def user_add(self, user, email, passwd):

    insert = "INSERT INTO users (username, email, passwd) VALUES " + \
            "(%s, %s, %s)" % (user, email, passwd)

    rowid = 0
    try:
        rowid = self.__dbh.execute(insert)
    except Exception as e:
        print e

    if rowid is 0:
        return (False, 'User exists');

    return (True, None)


if __name__ == "__main__":
print 'Testing'
raw_input('Hit enter to connect to the DB')

d = Database();


users = []

raw_input('Hit enter to create some users')
for i in range(5):
    users.append(str(i))
    d.user_add(users[i], users[i], users[i])

<- snip ->

问题是,当我试图从定义数据库类的模块的主以外的任何地方创建数据库对象时,例如:

代码语言:javascript
复制
import tornado.ioloop
import tornado.httpserver
import tornado.web

from register import Register
from logon import Logon
from db import Database

class Application(tornado.web.Application):

def __init__(self):

    resources = [
            (r"/logon", Logon),
            (r"/register", Register)
            ]

    self.db = Database()
    tornado.web.Application.__init__(self, resources)
    try:
        self.db.user_add('testuser', 'testemail', 'password')
    except Exception as e:
        print e



if __name__ == "__main__":

app = Application()

# Start the server.
server = tornado.httpserver.HTTPServer(app)
server.listen(8080)
tornado.ioloop.IOLoop.instance().start()

执行上述打印时(由于对self.__dbh.execute()的调用):

错误:根:在本地主机上连接到MySQL的错误

其他一些信息:

问题:

  • 为什么在定义类的模块的主中创建数据库对象与在其他地方创建数据库对象有区别?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-04 23:40:14

此问题是由于传递给查询的字符串参数未被转义所致,下面的更改起作用:

代码语言:javascript
复制
def user_add(self, user, email, passwd):

    insert = "INSERT INTO users (username, email, passwd) VALUES " + \
            "(\'%s\', \'%s\', \'%s\')" % (user, email, passwd)

    rowid = 0
    try:
        rowid = self.__dbh.execute(insert)
    except Exception as e:
        print e

    if rowid is 0:
        return (False, 'User exists');

    return (True, None)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15189526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档