首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理MySQL连接的Python类总是抛出错误

问处理MySQL连接的Python类总是抛出错误
EN

Stack Overflow用户
提问于 2016-10-12 19:27:51
回答 2查看 91关注 0票数 0

我正在尝试使用Python构建一个类,以便处理与MySQL数据库的所有交互。我已经安装了MySQLdb模块,并使用一段简单的代码测试了与数据库的连接。当我运行以下代码时:

代码语言:javascript
复制
import MySQLdb

db = MySQLdb.connect ( host="localhost", user="root" , passwd="xxxxxxx" , db= "some_db")
cursor = db.cursor()
s = cursor.execute ("SELECT * FROM some_table")
#Retrive a record to test it all went well...
t = cursor.fetchall()
for x in t:
print x
db.commit()
db.close()

上面的代码运行良好,它连接到"some_db“数据库,从"some_table”表中检索一条记录。

但是,当我运行下面列出的代码(由使用相同逻辑的类的一部分组成)时,会抛出错误。这个类背后的想法是打开任何数据库,并尽可能多地打开连接,执行查询等。请记住,以下只是类的一部分,更多的函数和你所拥有的东西将被添加。

代码如下:

代码语言:javascript
复制
import MySQLdb

class d_con (object):
    def __init__ (self, host, user , passwd , db ):
        self.host = host
        self.user = user
        self.passwd = passwd
        self.db = db
        self.d_b = MySQLdb.connect( host = self.host , user = self.user ,  passwd = self.passwd , db = self.db )
        #Test the connection...
        self.cur = self.d_b.cursor()
        self.disp = self.cur.execute ("SELECT VERSION()")
        print self.disp

    def close_connection(self):
        print "...Initializing connection closure..."
        self.d_b.close()

    #More function will be added , I am just testing the constructor.

if __name__ == "__main__ " :
    a = d_con()

else: 
    print ( " d_con class is imported , please instantiate an object in the fashion a = datacon.d_con() . ")

当我导入包含上述代码的文件时,它会执行并打印要求实例化该类的语句。在我实例化类之后

代码语言:javascript
复制
a=datacon.d_con("localhost" , "root" , "xxxxxxx" , "some_db" ) 

抛出此错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "datacon.py", line 8, in __init__
    self.d_b = MySQLdb.connect( self.host , self.user ,  self.passwd ,  self.db )
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/MySQLdb/__init__.py", line 81, in Connect
    return Connection(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-   packages/MySQLdb/connections.py", line 193, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (1049, "Unknown database 'some_table'")

请放心,我已经反复检查过MySQLdb.connect ()的参数是否正确。此外,我甚至在构造函数中硬连接了参数,以确保在实例化类时没有输入错误。每次,我都会遇到同样的错误。

由于我是Python新手,我不确定类文件在导入MySQLdb模块时是否有问题,或者是否存在变量作用域的问题。当我使用相同的数据库和相同的MySQL凭据执行对话顶部的代码时,MySQLdb模块确实成功导入了!你们能帮个忙吗?提前谢谢。

Ps:我在MacOS10.12上运行了所有这些

EN

回答 2

Stack Overflow用户

发布于 2016-10-12 20:13:52

您的示例中的MySQLdb.connect参数语法是否有所不同?

在工作模式中,您使用命名参数进行连接( host=“localhost”)等,但是在类模型中,您省略了参数名称host=、user=等,并且基于位置的参数似乎不起作用。

Hannu

票数 0
EN

Stack Overflow用户

发布于 2016-10-13 01:41:27

抱歉,伙计们!代码很好,我系统地在self.db变量中输入表的名称,而不是数据库的名称。代码运行得很好。

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

https://stackoverflow.com/questions/39997429

复制
相关文章

相似问题

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