c_query = "select * from `users` where user_id=%d"
    c_Cursor.execute( c_query, (1) )
код выдаёт ошибку:
File "/var/lib/python-support/python2.5/MySQLdb/cursors.py", line 151, in execute
query = query % db.literal(args)

TypeError: int argument required
вместо %d пробовал %i, %u
вместо (1) пробовал , "1", ("1") и т.д.
результат - та же ошибка.

видимо, не мне одному не понятно, почему так.
объясните по-русски, в чём фишка?
почему нет числового placeholder-а для MySQLdb ?

Last edited Sept. 22, 2008, 1:43 p.m.

Плейсхолдер для mysqldb один - и это %s. Если закинуть в числовую колонку "22", то MySQL разберётся, что это число 22.
ещё не понятно, почему
    a = 1
    c_Cursor.execute( c_query, (a) )
работает

    a = 1
    c_Cursor.execute( c_query, (a,) )
не работает (с запятой после a)
хотя в примере
max_price=5
c.execute("""SELECT spam, eggs, sausage FROM breakfast
          WHERE price < %s""", (max_price,))
после max_price запятая есть
Телепатировать сложно, хотелось бы знать содержимое переменных c_query и a, а также трейсбек ошибки.
c_query тот же, из первого поста.
собственно, и ошибка там же.
переменная a - тут... задана.

был бы другой контекст к моему второму посту- было бы и новое описание.
а так, можно и без ...телепатирования... обойтись, если не усложнять вопрос.

Last edited Sept. 22, 2008, 4:10 p.m.

Ну если всё тоже, то см. пост #2, надо использовать %s плейсхолдер.
те же переменные, та же ошибка.
только вопрос чуть другой

Last edited Sept. 22, 2008, 5:37 p.m.

Ок, сдаюсь :-) Все эти переменные и ошибки, раскиданные по разным постам не способствуют поиску решения. Пускай кто-нить другой составляет кусочки мозаики.
Я тоже не воткнул - в чем трабла.
проверил так:
import MySQLdb as mysql
con = mysql.connect(host ='localhost', user = '', passwd = '', db = 'test')
cur = con.cursor()
sql_str = "select * from `users` where id = %s"
a = 1
cur.execute(sql_str, (a,))
все работает.