создание пустого поля и получение INTEGER PRIMARY KEY с помощью sqlite, python - PullRequest
3 голосов
/ 04 февраля 2009

Я использую sqlite с python. Когда я вставляю в таблицу A, мне нужно передать ему идентификатор из таблицы B. Так что я хотел сделать, это вставить данные по умолчанию в B, взять идентификатор (который является автоматическим приращением) и использовать его в таблице A. Что лучше всего сделать? получить ключ из таблицы, в которую я только что вставил?

Ответы [ 3 ]

7 голосов
/ 04 февраля 2009

Как сказал Кристиан, sqlite3_last_insert_rowid() - это то, что вам нужно ... но это API уровня C, и вы используете привязки Python DB-API для SQLite.

Похоже, что метод курсора lastrowid будет делать то, что вы хотите (для получения дополнительной информации найдите «lastrowid» в документации) . Вставьте строку с cursor.execute( ... ), затем выполните что-то вроде lastid = cursor.lastrowid, чтобы проверить последний введенный идентификатор.

То, что вы говорите, что вам нужен "идентификатор", беспокоит меня, хотя ... не имеет значения какой идентификатор у вас есть? Если вы не используете данные, только что вставленные в B, для чего-то, и в этом случае вам понадобится этот идентификатор строки, ваша структура базы данных серьезно облажается, если вам просто нужен старый идентификатор строки для таблицы B.

1 голос
/ 04 февраля 2009

Просто используйте:

SELECT last_insert_rowid();

Однако, если у вас есть несколько соединений, записывающих в базу данных, вы можете не получить ожидаемый ключ.

1 голос
/ 04 февраля 2009

Проверьте sqlite3_last_insert_rowid () - это, вероятно, то, что вы ищете:

Каждая запись в таблице SQLite имеет уникальный 64-битный целочисленный ключ со знаком называется "rowid". Rowid всегда доступен как необъявленный столбец с именем ROWID, OID или _ROWID_ как Пока эти имена не используются по явно объявленным столбцам. Если таблица имеет столбец типа INTEGER ПЕРВИЧНЫЙ КЛЮЧ, то этот столбец другой псевдоним для rowid.

Эта процедура возвращает идентификатор строки последний успешный ВСТАВИТЬ в база данных из базы данных соединения в первом аргументе. Если нет успешные вставки когда-либо происходили в этом соединении с базой данных ноль вернулся.

Надеюсь, это поможет! (Более подробная информация о ROWID доступна здесь и здесь .)

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