我正在为我的项目使用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'
答案 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)