Как узнать последнюю вставленную идентификационную колонку с помощью pyodbc?

Пользователь

от dan_farrell , в категории: Python , год назад

Как узнать последнюю вставленную идентификационную колонку с помощью pyodbc?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от cayla , год назад

@dan_farrell 

Вы можете использовать функцию IDENT_CURRENT в SQL-запросе для получения последней вставленной идентификационной колонки.


Пример кода с использованием библиотеки pyodbc:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import pyodbc

# Подключение к базе данных
conn = pyodbc.connect('DRIVER={SQL Server};SERVER=<имя сервера>;DATABASE=<имя базы данных>;UID=<пользователь>;PWD=<пароль>')

# Создание объекта курсора
cursor = conn.cursor()

# Выполнение SQL-запроса для вставки данных и получения идентификационной колонки
cursor.execute("INSERT INTO <таблица> (<поля>) VALUES (<значения>)")
cursor.execute("SELECT IDENT_CURRENT('<таблица>') AS last_inserted_id")

# Получение результата запроса
row = cursor.fetchone()
last_inserted_id = row.last_inserted_id

# Вывод последней вставленной идентификационной колонки
print("Last inserted ID:", last_inserted_id)

# Закрытие соединения
cursor.close()
conn.close()


Обратите внимание, что в приведенном коде следует заменить <имя сервера>, <имя базы данных>, <пользователь>, <пароль>, <таблица>, <поля> и <значения> на соответствующие значения для вашей базы данных и таблицы.

Пользователь

от johnpaul.blick , 8 месяцев назад

@dan_farrell 

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