Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Базы данных > sqlite3 Выбрать строку lastrowid


Автор: tishaishii 6.11.2015, 19:59
Код

conn = sqlite3.connect( database , detect_types = sqlite3.PARSE_COLNAMES )
dbh = conn.cursor( )
dbh.execute( """
CREATE TABLE IF NOT EXISTS `acc_driver`(
    `id` CHARACTER( 32 ) PRIMARY KEY NOT null DEFAULT ( hex( randomblob( 16 ) ) ) ,
    `name` CHARACTER( 32 ) NOT null ,
    `title` CHARACTER( 32 ) NOT null
)
""" )
dbh.execute( """
INSERT INTO `acc_driver`(
          `name` ,
          `title`
) VALUES (
          ? , ?
)
""" , ( name , title ) )
conn.commit( )
rowid = dbh.lastrowid


Получаю почему-то цыфру "5", хотя, строк в таблице совсем не 5, а 2 (я вручную ввёл) .
Хорошо, пускай будет "5", но что это означает и как теперь узнать `acc_driver`.`id`?

Автор: tishaishii 6.11.2015, 20:22
Всё. Нашёл: http://stackoverflow.com/questions/7575166/android-sqlite-get-last-insert-row-id

Автор: samssrus 7.11.2015, 08:55
...не смотря на то, что ответ уже найден...
ИМХО использование чистых конструкций "sqlite3.connect", "dbh.execute" не есть хорошо...
для Python существует хорошая ORM - sqlalchemy (http://www.sqlalchemy.org/).

относительно заданного вопроса при использовании sqlalchmy можно было бы написать просто:
rowid = session.query(acc_driver).count() + 1

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/sqlite3-Vybrat-stroku-lastrowid-id563cdc9aae2015d4468b4567#findElement_E7045_563d924cae2015a467f4dc8a_0

Автор: tishaishii 8.11.2015, 15:10
Большое спасибо за ответ.

count()+1 - совсем не хорошо.
А ORM для клиентской программы ещё не хочу. Хочу поменьше кода и объёма.

Добавлено через 30 секунд
Есть 100% вариант по ROWID

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)