BillPull
BillPull

Reputation: 7013

Python cursor is returning number of rows instead of rows

Writing a script to clean up some data. Super unoptimized but this cursor is returning the number of results in the like query rather than the rows what am I doing wrong.

#!/usr/bin/python
import re
import MySQLdb
import collections

db = MySQLdb.connect(host="localhost", # your host, usually localhost
                     user="admin", # your username
                      passwd="", # your password
                      db="test") # name of the data base

# you must create a Cursor object. It will let
#  you execute all the query you need
cur = db.cursor() 

# Use all the SQL you like
cur.execute("SELECT * FROM vendor")

seen = []

# print all the first cell of all the rows
for row in cur.fetchall() :
    for word in row[1].split(' '):
        seen.append(word)

_digits = re.compile('\d')
def contains_digits(d):
    return bool(_digits.search(d))


count_word = collections.Counter(seen)
found_multi = [i for i in count_word if count_word[i] > 1 and not contains_digits(i) and len(i) > 1]

unique_multiples = list(found_multi)

groups = dict()

for word in unique_multiples:
    like_str = '%' + word + '%'
    res = cur.execute("""SELECT * FROM vendor where name like %s""", like_str)

Upvotes: 0

Views: 513

Answers (1)

Martijn Pieters
Martijn Pieters

Reputation: 1124858

You are storing the result of cur.execute(), which is the number of rows. You are never actually fetching any of the results.

Use .fetchall() to get all result rows or iterate over the cursor after executing:

for word in unique_multiples:
    like_str = '%' + word + '%'
    cur.execute("""SELECT * FROM vendor where name like %s""", like_str)
    for row in cur:
        print row

Upvotes: 2

Related Questions