Найти - Пользователи
Полная версия: Максимальное значение ключа_id
Начало » Python для новичков » Максимальное значение ключа_id
1
tadej
спасибо всем кто откликнулся на мой предыдущий вопрос, но возник новый
Итак, есть
cursor.execute(“”“ INSERT INTO user () VALUES ()”“”, )
это работает коректно, таблица заполняется, но…
user_id есть AUTO_INCREMENT
потому я его ка бы не знаю
теперь проблема
мне надо вытянуть в какую нить переменнуй последний user_id
если сделать
tt = cursor.execute(“”“SELECT MAX(user_id) FROM (user)”“”)
tr = cursor.execute(“”“SELECT `user_id` FROM `user` ORDER BY `user_id` DESC LIMIT 1”“”)
print tt, rt
то выводит 1 1

а если
DECLARE @tt integer;
SELECT @tt:=MAX(user_id) FROM `user`;
SELECT `user_id` FROM `user` ORDER BY `user_id` DESC LIMIT 1
выводят правильно 32

Где ошибка?
Заранее спасибо )))
PooH
Начнем с того, что по PEP 249 значение возвращаемое execute не определено (хотя в вашем случае это похоже число возвращенных строк, но полагаться на это не следует). чтобы получить результат запроса надо вызвать cursor.fetchone()(ну или fetchmany. fetchall и т.д.)

Далее, получать последний id через max не следует, представьте что пишут в базу хотя бы два потока.

Для получения последнего вставленного id у курсора есть свойство Cursor .lastrowid хотя тут зависит от базы данных и библиотеки доступа, поскольку свойство это опционально.
tadej
Спасибо, но
PooH
Далее, получать последний id через max не следует, представьте что пишут в базу хотя бы два потока.
в конкретном случае поток один, и последний (максимальный) ИД бутет тот что записан в предыдущей строчки програми. (в даном случае, это регистрация пользователя)

PooH
Для получения последнего вставленного id у курсора есть свойство Cursor .lastrowid хотя тут зависит от базы данных и библиотеки доступа, поскольку свойство это опционально.
Шас будем разбиратся ))))

UPD
Спасибо за совет, но оказывается есть намного проще вариант
con.insert_id() – Возвращает ID, сгенерированный для столбца AUTO_INCREMENT предыдущим запросом
PooH
tadej
в конкретном случае поток один, и последний (максимальный) ИД бутет тот что записан в предыдущей строчки програми. (в даном случае, это регистрация пользователя)
Регистрация пользователя? Не веб ли это приложение? Тогда там никак не один поток.

tadej
Спасибо за совет, но оказывается есть намного проще вариант
con.insert_id() – Возвращает ID, сгенерированный для столбца AUTO_INCREMENT предыдущим запросом
Вы не сказали что у вас MySQL. Рекомендую все же пользоваться .lastrowid - он описан в DB API, т.е. стандартен, хотя и не реализован для некоторых библиотек, в частности для MSSQL через pypyodbc, а insert_id чисто мускульная приблуда.
tadej
PooH
Тогда там никак не один поток.
Почему?
Пока не пройдет весь цикл регистрации, следующий пользователь не зарегится.
Хотя я мало знаю, и 100500% все что я пишу придется перелопачевать и оптимизировать )))
PooH
tadej
PooH
Тогда там никак не один поток.
Почему?
Пока не пройдет весь цикл регистрации, следующий пользователь не зарегится.
Потому что веб-приложение обычно запускается в несколько потоков, чтобы пользователи могли работать с ним одновременно(про асинхронные библиотеки помним, но тут умалчиваем).
tadej
Знач будем позже решать этот вопрос )))

А теперь новый вопрос
Как передать переменную в MySQL запрос

cursor.execute(“”“ UPDATE house SET house_free = REPLACE(house_free, ‘1’, ‘0’) WHERE (id = busy_id) ”“”)
суть такая
есть таблица house
в ней есть столбец булеан house_free ну и столбец id
надо сделать так, чтобы запрос менял “1” на “0” но в конкретной строке id, которая задается busy_id
База MySQL
Заранее спасибо
PooH
cursor.execute("UPDATE house SET house_free = REPLACE(house_free, ‘1’, ‘0’) WHERE (id = ?)", (busy_id,))
Вы документацию по DB API из принципа читать не хотите? ;)
tadej
PooH
Вы документацию по DB API из принципа читать не хотите?

я языка не знаю )))) пока не знаю
спасибо.
Пошел учится дальше, но не надолго, скоро опять вопросы будут ))))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB