[Tutor] Updating MySQL Database

Ricardo Aráoz ricaraoz at gmail.com
Mon Oct 8 03:42:07 CEST 2007


wormwood_3 wrote:
> Hello all,
> 
> I have a script which takes data from a file or MySQL DB, looks up some stuff, then can print results to console or file. I would also like it to be able to update a MySQL database with the results. Does anyone have any ideas on how to do this? I can update records just fine, but what is the best way to do LOTS of updates aside from running an update statement per record? Using that method, for example, assuming I have a list of results, each line of the form "ip,fqdn":
> 
>     for line in inputlist:
>         updatequery = "update resultstable set fqdn = line.split(",")[1] where ip = line.split(",")[0];"
>         connection = MySQLdb.connect(db=self.todatabase, host=self.host, 
>             user=self.user, passwd=self.passwd, port=int(self.port))
>         cursor = connection.cursor()
>         cursor.execute(updatequery)
>         queryresults = cursor.fetchall()
>         cursor.close()
>         connection.close()
> 
> But this means making a connection and query for every line of results, which is a lot. Any ideas on optimization?
> 
> Thanks,
> Sam

Haven't worked with DBs in Python yet but I guess it can't be too
different. What if you put the connect/disconnect outside your loop?

    connection = MySQLdb.connect(db=self.todatabase, host=self.host,
        user=self.user, passwd=self.passwd, port=int(self.port))
    cursor = connection.cursor()
    for line in inputlist:
        updatequery = "update resultstable set fqdn = line.split(",")[1]
where ip = line.split(",")[0];"
        cursor.execute(updatequery)
        queryresults = cursor.fetchall()
    cursor.close()
    connection.close()

Do you need to do the "cursor.fetchall()"? AFAIK an update will return
no data.
You might want to use transactions too (outside the loop).
BTW, I think your updatequery not properly configured, MySQL supports
(?) variable substitution (and even if it didn't your updatequery is
wrong, the variables should be outside the string with a %).
HTH







More information about the Tutor mailing list