Problem with format string / MySQL cursor

Paul McNett p at ulmcnett.com
Thu Oct 18 16:08:04 EDT 2007


timaranz at gmail.com wrote:

> On Oct 19, 7:32 am, Florian Lindner <Florian.Lind... at xgm.de> wrote:
>> Hello,
>> I have a string:
>>
>> INSERT INTO mailboxes (`name`, `login`, `home`, `maildir`, `uid`,
>> `gid`, `password`) VALUES (%s, %s, %s, %s, %i, %i, %s)
>>
>> that is passed to a MySQL cursor from MySQLdb:
>>
>> ret = cursor.execute(sql, paras)
>>
>> paras is:
>>
>> ('flindner', 'te... at florian-lindner.de', '/home/flindner/', '/home/
>> flindner/Mail/test', 1001, 1001, '123')
>>
>> But that gives me an error:
>>
>> Traceback (most recent call last):
>>   File "account.py", line 188, in ?
>>     main()
>>   File "account.py", line 33, in main
>>     execute(action, account_type, options)
>>   File "account.py", line 129, in execute
>>     executeSQL(sql, options.username, options.login, options.home,
>> options.directory, options.uid, options.gid, options.password)
>>   File "/home/flindner/common.py", line 29, in executeSQL
>>     ret = cursor.execute(sql, paras)
>>   File "/usr/lib/python2.4/site-packages/MySQLdb/cursors.py", line
>> 148, in execute
>>     query = query % db.literal(args)
>> TypeError: int argument required
>>
>> I don't see errors in the format string or some other problem....
>>
>> What's wrong?


> You should be using '?' for parameter bindings in your sql string not
> python format specifiers (you are after all writing sql here not
> python).
> 
> INSERT INTO mailboxes (`name`, `login`, `home`, `maildir`, `uid`,
> `gid`, `password`) VALUES (?, ?, ?, ?, ?, ?, ?)



Sorry Tim, but that isn't correct:

>>> import MySQLdb
>>> MySQLdb.paramstyle


'format'

Florian, what happens when you replace your %i with %s?


-- 
pkm ~ http://paulmcnett.com




More information about the Python-list mailing list