简体   繁体   中英

select data from mysql with mysql-connector-python

I have a mysql db that I manage via MAMP (using port 3306, server is on port 80). I have downloaded and installed the mysql-connector-python library from Oracle and am trying to access and manipulate the db. Curiously, following the tutorials at http://dev.mysql.com/doc/connector-python/en/connector-python-tutorial-cursorbuffered.html , I'm able to run a query to insert new records into a specific table (as long as I issue the.commit() method on my connector).

However, I can't seem to retrieve any data with a simple select command. So the query, "Select * from Assignments " returns None.

query = ('''SELECT title,description FROM  `Assignments` LIMIT 0 , 30''')

cursor = cnx.cursor()
result = cursor.execute(query)
print "result:",result

#All assignment info
for (title, description) in results:
    print title, description

I keep getting the error, "TypeError: 'NoneType' object is not iterable". I believe this has to do with the fact that the result of the executed query is None. B/c I'm able to commit update and insert changes to the db, I know that I'm connecting just fine. Why can't I run a simple SELECT command and get something?

You should use a MySQLCursor.fetchall method to get the results .

cursor.execute(query)
rows = cursor.fetchall()

or

cursor.execute(query)
head_rows = cursor.fetchmany(size=2)
remaining_rows = cursor.fetchall()

You don't need to call fetchall , if you look at the docs you will see there is no assignment to the return value of the execute call as the method returns None , you just execute and then iterate over the MySQLCursor/cursor object:

query = ('''SELECT title,description FROM  `Assignments` LIMIT 0 , 30''')

cursor = cnx.cursor()

# forget assigning, just execute
cursor.execute(query)

# iterate over the cursor 
for (title, description) in cursor:
    print title, description

If you want to use mycursor.fetchone() then do the following:

   myresult = mycursor.fetchone()
   row_count = mycursor.rowcount
    
   if row_count == 1:
      row_id = myresult[0]
      print(row_id)

Basically you can access the items as an array like myresult[0], myresult[1] and so on....

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM