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