<!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>