MySQLdb warnings problem

Andy Todd andy47 at halfcooked.com
Tue Jun 11 01:57:47 EDT 2002


Terry Hancock <hancock at anansispaceworks.com> wrote in 
news:mailman.1023595512.23403.python-list at python.org:

> Hi all,
> 
> I'm in the middle of writing a Zope/MySQL project, and
> I use a Python/MySQL crawler to do some database
> maintenance tasks.
> 
> I'm writing this crawler now, and it's my first
> experience with "Python Database API 2.0", which seems
> really overblown and complicated compared to the simple
> interface described in O'Reilly's MySQL/mSQL book, or
> with the ZSQL interface in Zope. I suppose this is
> for the benefit of more complicated RDBMs than MySQL.
> 
> Anyway, I hope I'm not making a mistake using it --
> I'm just trying to use the most "standard" Python
> interface to MySQL, and I'm under the impression that
> this is it. Please advise if I'm wrong.
> 
> I couldn't find a mysqldb specific mailing list, so I
> thought I'd try asking my question here:
> 
> The program is fairly long, but what happens is that
> it scans the database for entries in a database table
> called "user" and calculates some statistics for them
> based on other tables.  All the retrievals work fine,
> but I get a funny traceback when I write the data
> back into the user's row in the table:
> 
> Traceback (most recent call last):
>   File "Styx.py", line 258, in ?
>     styx.crawl( styx.params['P_Styx'],  styx_tasks)
>   File "Crawler.py", line 193, in crawl
>     task[1](argval)                     # Operate on it
>   File "Styx.py", line 165, in compute_user_stats
>     dbcursor.execute(sqlcmd)
>   File
> "/usr/local/narya/lib/python2.1/site-packages/MySQLdb/cursors.py", line
> 61, in execute
>     r = self._query(query)
>   File
> "/usr/local/narya/lib/python2.1/site-packages/MySQLdb/cursors.py", line
> 168, in _query
>     rowcount = self._BaseCursor__do_query(q)
>   File
> "/usr/local/narya/lib/python2.1/site-packages/MySQLdb/cursors.py", line
> 118, in __do_query
>     self._check_for_warnings()
>   File
> "/usr/local/narya/lib/python2.1/site-packages/MySQLdb/cursors.py", line
> 150, in _check_for_warnings
>     raise Warning, self._info
> _mysql_exceptions.Warning: Rows matched: 1  Changed: 0  Warnings: 1
> 
> For reference, here's a snippet of the code where this
> broke:
>      sqlcmd= """
>           UPDATE user SET nposts=%d, nrecent=%d, keytopic='%s'
>           WHERE username='%s'
>           """ % ( n_posts, n_recent, keytopic, user[0] )
> 
>      #print sqlcmd
>      #try:
>      dbcursor.execute(sqlcmd)
>      #except:
>      #     pass
> 
> As the commented-out lines indicate, I tried ignoring this problem.
> Doing so seems to make the program work fine, but I can't figure
> out why it should be an issue in the first place (and I generally
> prefer not to just ignore warnings, especially without understanding
> them).
> 
> The thing is, what's the warning message?  Nothing was changed
> this time, because a previous run already updated the stats (the
> first run said "Rows matched: 1  Changed: 1  Warnings: 1").
> 
> Uncommenting the print statement shows what the actual SQL was:
> 
>   UPDATE user SET nposts=7, nrecent=0, keytopic='/'
>   WHERE username='anonymous'
> 
> which looks legit to me, though I'm not really an SQL expert.
> 
> So maybe it's raising a warning every time I write to the
> database? Why?
> 
> Should I just stick the try-except code back in and forget
> about it, or am I missing a step somewhere? Any ideas would
> be much appreciated.
> 
> Thanks!
> Terry
> 

Terry,

There isn't (as far as I know) a MySQLdb mailing list, but questions of 
this type are very welcome at the db-sig mailing list (db-sig at python.org or  
http://mail.python.org/mailman/listinfo/db-sig).

Regards,
Andy
-- 
Contents free posts a speciality



More information about the Python-list mailing list