2015-05-24 11 views
9

Próbuję kwerendy w lokalnej bazie danych MySQL przy użyciu (3.4) modułu MySQL Pythona z następującego kodu:Dlaczego wykonanie MySQL powraca Brak?

class databases(): 

    def externaldatabase(self): 

    try: 
    c = mysql.connector.connect(host="127.0.0.1", user="user", 
           password="password", database="database") 
    if c.is_connected(): 
      c.autocommit = True 
     return(c) 
    except: 
     return(None) 
    d = databases().externaldatabase() 
    c = d.cursor() 
    r = c.execute('''select * from tbl_wiki''') 
    print(r) 
> Returns: None 

O ile mogę powiedzieć, że połączenie jest skuteczne, gdy baza danych składa się z kilku rzędów ale zapytanie zawsze zwraca typ none.

Jakie instancje wykonuje funkcja wykonywania MySQL? Brak?

+1

'c.execute()' nie zwraca niczego, chyba że używasz opcji 'multi = True'. Następnie zwraca iterator, który pozwala ci przejrzeć wyniki każdego zapytania w wielu zapytaniach. – Barmar

+1

Zwykle metody wywołuje się na kursorze, aby uzyskać wyniki poza zapytaniem, np. 'c.fetchone()', aby uzyskać jeden wiersz, 'c.fetchall()', aby uzyskać wszystkie wyniki. – Barmar

+0

Zobacz dokumentację na stronie http://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor.html – Barmar

Odpowiedz

8

Wykonanie zapytania nie ma wartości zwracanych.

Wzór trzeba wykonać jest:

cursor creation; 
cursor, execute query; 
cursor, *fetch rows*; 

Albo w Pythonie:

c = d.cursor() 

c.execute(query) # selected rows stored in cursor memory 

rows = c.fetchall() # get all selected rows, as Barmar mentioned 
for r in rows: 
    print(r) 

Również niektóre moduły db pozwalają na iteracyjne nad kursorem za pomocą ... w strukturze, ale potrójnie sprawdź, czy chodzi o mysql.