2015-05-24 20 views
9

tôi đang cố gắng để truy vấn trên một cơ sở dữ liệu MySQL địa phương sử dụng (3.4) mô-đun MySQL Python với đoạn mã sau:Tại sao MySQL thực thi trả về Không?

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 

Theo như tôi có thể nói, kết nối thành công, cơ sở dữ liệu bao gồm nhiều hàng nhưng truy vấn luôn trả về loại không có.

Chức năng thực hiện MySQL nào trả về None?

+1

'c.execute()' không trả lại bất kỳ điều gì trừ khi bạn sử dụng tùy chọn 'multi = True'. Sau đó, nó trả về một trình lặp cho phép bạn duyệt qua các kết quả của mỗi truy vấn trong nhiều truy vấn. – Barmar

+1

Thông thường, bạn gọi các phương thức trên con trỏ để nhận kết quả từ truy vấn, ví dụ: 'c.fetchone()' để lấy một hàng, 'c.fetchall()' để nhận tất cả các kết quả. – Barmar

+0

Xem tài liệu tại http://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor.html – Barmar

Trả lời

8

Thực hiện truy vấn không có giá trị trả về.

Các mô hình bạn cần phải làm theo là:

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

Hoặc trong python:

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) 

Ngoài ra một số module db cho phép bạn lặp qua các con trỏ bằng cách sử dụng cho ... trong mô hình, nhưng kiểm tra ba liên quan đến mysql.

Các vấn đề liên quan