альтернатива или синтаксис lastrowid () без использования execute в sqlite python? - PullRequest
2 голосов
/ 01 марта 2011

В sqlite3 на python я пытаюсь создать программу, в которую будет вставлена ​​новая строка в записываемой таблице, которую нужно распечатать.Но я только что прочитал документацию здесь , что INSERT должен использоваться в операторе execute ().Проблема в том, что программа, которую я создаю, запрашивает у пользователя его / ее информацию, и для участника будет назначен идентификатор первичного ключа, так как его / ее идентификационный номер должен отображаться.Другими словами, оператор execute ("INSERT") не должен выполняться первым, так как идентификаторы ключей были бы неправильными для назначения члена.

Сначала я подумал, что lastrowid можно запустить без использования execute («INSERT»), но я заметил, что он всегда давал мне значение «None».Затем я прочитал документацию в sqlite3 на python и нашел альтернативы в Google, чтобы решить эту проблему.

Я где-то читал в Google, что можно использовать SELECT last_insert_rowid (), но было бы хорошо спросить, каков синтаксисэто в питоне?Я пытался кодировать его так:

NextID = con.execute("select last_insert_rowid()")

Но он только что дал мне вывод объекта курсора ""

Я также думал о создании другой таблицы, где всегда будут толькобыть одним значением.Он будет получать значение lastrowid основной таблицы при каждом новом вводе данных в основную таблицу.Полученное значение будет затем вставлено и перезаписано в другую таблицу, так что каждый раз, когда в основную таблицу необходимо вводить новый набор данных и идентификатор следующей строки, он просто получит доступ к таблице с этим одним значением..

Или есть альтернативный и более простой способ сделать это?

Любая помощь очень ценится глубоко кланяется

Ответы [ 2 ]

2 голосов
/ 01 марта 2011

Вы могли бы угадать следующий идентификатор , если бы запросили вашу таблицу , прежде чем запрашивать у пользователя его / ее информацию с помощью SELECT MAX(ID) + 1 as NewID FROM DesiredTable.

Прежде чем вставлять новые данные (включая новый идентификатор), запустите транзакцию, выполните откат только в случае сбоя вставки (поскольку другой процесс был быстрее с той же самой операцией) и снова попросите пользователя.Если все в порядке, просто сделайте коммит.

0 голосов
/ 02 марта 2011

Спасибо за ответы и предложения, размещенные всеми, но я закончил тем, что сделал что-то вроде этого:

#only to get the value of NextID to display
TempNick = "ThisIsADummyNickToBeDeleted"        
cur.execute("insert into Members (Nick) values (?)", (TempNick, ))
NextID = cur.lastrowid 
cur.execute("delete from Members where ID = ?",  (NextID, ))

Таким образом, в основном, чтобы получить lastrowid, я вставил фиктивные данные, а затем получилзначение lastrowid, фиктивные данные будут удалены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...