2017-01-23 2 views
-2

Я использую python 3.5.2 для моего проекта. Я установил MySQLdb через pip для подключения Mysql.Python MySQLdb execute return int

Код:

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

Пожалуйста, прочтите эту ссылку: http://mysql-python.sourceforge.net/MySQLdb.html

На данный момент ваш запрос был выполнен, и вы должны получить результаты. У вас есть два варианта:

г = db.store_result()

... или ... г = 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) 
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/