2016-04-26 22 views
0

Dies ist mein Code:Elemente aus einer Datenbank Tupel in Python Get

import pymysql 

def connect(): 
    print("connect to database") 
    pw = input("Password: ") 
    conn = pymysql.connect(host='localhost', port=3306, 
          user='root', passwd=pw, db='contacts') 
    conn.autocommit(True) 
    cur_ = conn.cursor() 
    return cur_ 

def show_tables(self): 
    print("show tables: ") 
    self.execute("""SHOW TABLES""") 
    print(self.fetchall()) 
    return self.fetchall() 

db = connect() 
table_names = show_tables(db) # returns a tuple 
print(len(table_names)) # output zero 
table_name = table_names[0][0] # ? - todo - get item from tuple 

show_tables() Rückkehr der Wert (('person',),). Ich möchte den Namen person mit table_names[0][0] bekommen. Aber das funktioniert nicht. Auch die Länge von (('person',),) ist 0. Aber warum?

Edit: bekomme ich den Fehler:

Traceback (most recent call last): 
    File "/home/kame/Dropbox/code/python/scripts/database.py", line 65, in <module> 
    table_name = table_names[0][0] # ? - todo - get item from tuple 
IndexError: tuple index out of range 
+0

Sie sagen, "das nicht funktioniert". Was passiert eigentlich? – user2357112

+1

Hilft [diese Antwort] (http://stackoverflow.com/a/8363828/771848)? – alecxe

+3

Wenn ich 'p = (('person',),)' und dann 'len (p)' mache, bekomme ich '1' wie erwartet. 'p [0] [0]' gibt auch "Person" (wieder, wie erwartet). Sind Sie sicher, dass Sie das Tupel zurückgeben, von dem Sie glauben, dass es zurückkehrt? – mgilson

Antwort

2

Es sieht aus wie show_tables (Selbst-) kehrt null, eine Liste auf Keine Objekt, da Sie nur ein Anruf kann Zeit cursor.fetchall().

Die Lösung: Kommentieren Sie die Zeile

print(self.fetchall())