Python MySQLdb执行return int

时间:2017-01-23 07:53:42

标签: python mysql python-3.x

我正在为我的项目使用python 3.5.2。我通过 pip 为Mysql连接安装了MySQLdb

代码:

import MySQLdb

class DB:
    def __init__(self):
        self.con = MySQLdb.connect(host="127.0.0.1", user="*", passwd="*", db="*")
        self.cur = self.con.cursor()

    def query(self, q):
        r = self.cur.execute(q)
        return r

def test():
    db = DB()
    result = db.query('SELECT id, name FROM test')
    return print(result)

def test1():
    db = DB()
    result = db.query('SELECT id, name FROM test').fetchall()
    for res in result:
        id, name = res
        print(id, name)

test()
test1()
#test output >>> '3'
#test1 output >>> AttributeError: 'int' object has no attribute 'fetchall'

测试表:

id     |     name
1      |    'test'
2      |    'test2'
3      |    'test3'

2 个答案:

答案 0 :(得分:0)

cursor.execute()将返回修改或检索的行数,就像在PHP中一样。你试过像这样返回fetchall()吗?

 def query(self, q):
   r = self.cur.execute(q).fetchall()
   return r

有关更多文档,请参阅此处:https://ianhowson.com/blog/a-quick-guide-to-using-mysql-in-python/

答案 1 :(得分:0)

请阅读此链接:http://mysql-python.sourceforge.net/MySQLdb.html

  
    

此时您的查询已执行,您需要获取     结果。您有两种选择:

         

R = db.store_result()

         

...或... r = db.use_result()两个方法都返回一个结果对象。有什么不同? store_result()将整个结果集返回到

         

客户立即。如果您的结果集非常大,可以这样做     是个问题。解决此问题的一种方法是向您的。添加LIMIT子句     查询,限制返回的行数。另一种是使用     use_result(),它将结果集保存在服务器中并发送它     您获取时逐行。但是,这会占用服务器     资源,它绑定了连接:你不能再做了     查询,直到您获取所有行。一般我推荐     使用store_result()除非你的结果集真的很大而且你     由于某种原因不能使用LIMIT。

  
def test1():
    db = DB()
    db.query('SELECT id, name FROM test')
    result = db.cur.fetchall()
    for res in result:
        id, name = res
        print(id, name)