Search code examples
pythonmysqlpymysql

Python MySQL Statement output: 0 or 1


I am trying to get Information from my database, and print it, but unfortunately, Instead of Printing the Information from the Table, it just Prints 0 or 1.

Why does it do this? Can someone please help me?

sql = ("SELECT code FROM testing WHERE email = ((%s))")
sql2 = a.execute(sql, (fullemail))
sqlusername = ("SELECT username FROM testing123 WHERE code = ((%s))")
username = a.execute(sqlusername, (sql2))

print("Test3")
print(username)

Thank you. enter image description here


Solution

  • The execute() method just returns the number of impacted rows.

    You must use .fetchall() or equivalent (e.g. .fetchone()...) DBAPI methods to get a resultset.

    Also, using parentheses alone around a single value: (fullemail) will not be recognized as a tuple, you need to explicitly add a comma so Python will recognize this as a tuple: (fullemail, )

    sql = ("SELECT code FROM testing WHERE email = %s")
    a.execute(sql, (fullemail, ))
    sql2 = a.fetchall()
    
    print(sql2)
    
    sqlusername = ("SELECT username FROM testing123 WHERE code = %s")
    a.execute(sqlusername, (sql2[0][0], ))
    username = a.fetchall()
    
    print("Test3")
    print(username)
    

    Depending on which library you are using:

    You can also use a DictCursor to get your result set rows as dict instead of list. Usage is like:

    from pymysql.cursors import DictCursor
    import pymysql
    
    db = pymysql.connect(host="", user="", passwd="", cursorclass=DictCursor)
    
    with db.cursor() as cur:
        cur.execute("SELECT ...")
        results = cur.fetchall()
    

    This will give you a list of dictionaries instead of a list of lists.