Problem with MySQL cursor

Sells, Fred fred.sells at adventistcare.org
Thu Oct 11 09:37:05 EDT 2007


I don't think you can substitute the table name and column names in the
execute, just values ( I could be wrong)

try building it like this:
sql = "INSERT INTO %s %s VALUES " % (taablename,  columnstuple, '(%s)')
cursor.execute(sql, values)

> Hello,
> I have a function that executes a SQL statement with MySQLdb:
> 
> def executeSQL(sql,  *args):
>     print sql % args
>     cursor = conn.cursor()
>     cursor.execute(sql, args)
>     cursor.close()
> 
> it's called like that:
> 
>     sql = "INSERT INTO %s (%s) VALUES (%s)"
>     executeSQL(sql,  DOMAIN_TABLE, DOMAIN_FIELD, domainname)
> 
> The statement that is printed looks ok (missing quotes, but AFAIK
> cursor.execute does that):
> 
> INSERT INTO domains (domain) VALUES (xgm.de)
> 
> but MySQL prints an error:
> 
> Traceback (most recent call last):
>   File "manage.py", line 90, in ?
>     addDomain(domainName)
>   File "manage.py", line 27, in addDomain
>     executeSQL(sql,  DOMAIN_TABLE, DOMAIN_FIELD, domainname)
>   File "manage.py", line 22, in executeSQL
>     cursor.execute(sql, args)
>   File "/usr/lib/python2.4/site-packages/MySQLdb/cursors.py", 
> line 163, in
> execute
>     self.errorhandler(self, exc, value)
>   File 
> "/usr/lib/python2.4/site-packages/MySQLdb/connections.py", line 35,
> in defaulterrorhandler
>     raise errorclass, errorvalue
> _mysql_exceptions.ProgrammingError: (1064, "You have an error 
> in your SQL
> syntax; check the manual that corresponds to your MySQL 
> server version for
> the right syntax to use near ''domains' ('domain') VALUES 
> ('xgm.de')' at
> line 1")
> 
> I see the error: 2 opening quotes but only 1 closing around 
> domains. But
> where do they come from?
> 
> Note that there are no quotes at print sql % args.
> 
> Thanks,
> 
> Florian
> -- 
> http://mail.python.org/mailman/listinfo/python-list
> 



More information about the Python-list mailing list