托伦布(错误:根目录:连接到本地主机上的MySQL时出错)

2024-06-13 07:01:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用tornado/torndb开发一个web应用程序,但在数据库交互方面遇到了一些问题。我编写了一个“Database”类,它包装了torndb,以便为我的web应用程序提供一些常见的数据库功能。从我编写的数据库类调用任何方法时,与数据库的连接似乎有问题:

““错误:根目录:连接到本地主机上的MySQL时出错“

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

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

#!/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->

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

^{pr2}$

上述执行时打印(由于调用self__dbh.执行()):

在错误:根目录:连接到本地主机上的MySQL时出错

其他一些信息:

问题:

  • 为什么在定义类的模块的main中创建数据库对象与在其他任何地方创建数据库对象有何不同?在

Tags: to对象self数据库mainemailusersdatabase
1条回答
网友
1楼 · 发布于 2024-06-13 07:01:15

该问题是由于传递给查询的字符串参数未被转义,但以下更改有效:

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)

相关问题 更多 >