Search code examples
pythonmysqldatabasetuplespymysql

Get items from a database tuple in Python


This is my code:

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() return the value (('person',),). I want to get the name person with table_names[0][0]. But this doesn't work. Also the length of (('person',),) is 0. But why?

Edit: I get the error:

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

Solution

  • It looks like show_tables(self) is returning null, a list on None object, because you can only call one time cursor.fetchall().

    The solution : comment the line

    print(self.fetchall())