<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body text="#000000" bgcolor="#ffffff">
I'm going crazy.<br>
<br>
Using python 2.5.2 on 64 bit Linux.<br>
<br>
I have a class which reads CSV files using the CSV DictReader. If I
print the rows, everything works perfectly. If I insert the rows into a
MySQL table using MySQLdb, the DictReader loops back and begins
re-reading from the beginning of the file when it reaches EOF.<br>
<br>
Here's the code:<br>
<br>
class CsvLoader:<br>
    """load data from a CSV file into a corresponding MySQL table"""<br>
<br>
    def __init__(self, fname, schema, db, useCleanReader = False):<br>
        self.schema = schema<br>
        self.db = db<br>
        if useCleanReader:<br>
            self.reader = csv.DictReader(CleanReader(fname),
delimiter=',', quotechar='"')<br>
        else:<br>
            self.reader = csv.DictReader(open(fname), delimiter=',',
quotechar='"')<br>
    <br>
    def loadMysql(self):<br>
        for row in self.reader:<br>
            self.db.insertGeneric(self.schema.tableName(), row)<br>
<br>
    def printRows(self):<br>
        for row in self.reader:<br>
            print "\n", row<br>
<br>
and here is the insertGeneric method:<br>
<br>
    def insertGeneric(self, table, record):<br>
        """execute a generic INSERT, given a dict as input"""<br>
        fieldList = []<br>
        valueList = []<br>
        for k in record.keys():<br>
            fieldList.append(k)<br>
            valueList.append(record[k])<br>
        fields = ", ".join(fieldList)<br>
        m = ['%s']<br>
        valueMarkers = ", ".join(m * len(valueList))  # create a string
like: %s, %s, %s...<br>
        sql = 'insert into %s (%s) values (%s)' % (table, fields,
valueMarkers)<br>
        cursor = self.conn.cursor()<br>
        print "+++ insert: %s <= %s" % (sql, valueList)<br>
        cursor.execute(sql, valueList)<br>
        cursor.close()<br>
<br>
useCleanReader is False<br>
CsvLoader.printRows() works fine.<br>
CsvLoader.loadMySql() keeps looping through the CSV file.<br>
<br>
Ideas?<br>
<br>
    -- Art Z.<br>
<br>
<div class="moz-signature">-- <br>
<p style="font-style: italic;">Art Zemon, President<br>
<a href="http://www.hens-teeth.net/">Hen's Teeth Network</a><br>
Phone: (866)HENS-NET or (636)447-3030 ext. 200<br>
Twitter: <a href="http://twitter.com/AZemon">AZemon</a></p>
</div>
</body>
</html>