Как получить primary_key последней вставленной записи в базе данных с Python

0

Я пытаюсь добавить некоторые данные в базу данных с помощью python. Но я не могу получить auto increment primary_key из последней вставленной записи.

Я проверил подобные вопросы здесь и здесь, но это не сработало.

Мой код выглядит следующим образом:

def insert_vehicles_to_db(vehicle):
    conn = db_connection()
    cur = conn.cursor()    

    if vehicle_not_exists(vehicle, conn, cur):
        try:
            insert_vehicle(vehicle, conn, cur)
        except Exception as e:
            pass    
    else:
        pass
    conn.close()

Затем он переходит к функции insert_vehicle. В этой функции я хочу:

  • добавить новый vehicle в базу данных
  • добавить новую цену в таблицу vehicle_price
  • для предыдущего шага мне нужен последний вставленный первичный ключ vehicles из таблицы vehicles

Функция insert_vehicle выглядит следующим образом:

def insert_vehicle(vehicle, conn, cur):
    try:
        query = "INSERT INTO vehicles (reference, data, price, reference_url, timestamp) VALUES (%s, %s, %s, %s, %s);"
        cur.execute(query, (vehicle['reference'], "", vehicle['price'], vehicle['reference_url'], datetime.datetime.now()))


        ////////// I tried here vehicle_id = cur.lastrowid, it gives me always 0 //////////


        insert_vehicle_price(vehicle['price'], vehicle_id, conn, cur)
        conn.commit()

    except Exception as e:
        # TODO Handle error
        pass

И insert_vehicle_price выглядит следующим образом:

def insert_vehicle_price(price, vehicle_id, conn, cur):
    //// Here I need the correct vehicle_id to be able to insert a new record in 'vehicle_price' table
    pass

Любая идея, как его решить?

  • 0
    если бы я был тобой, я бы, наверное, закончил писать это с помощью SQLAlchemy ORM
  • 0
    Пожалуйста, запустите SHOW CREATE TABLE vehicles в клиенте mysql и включите результат в свой вопрос. Подтвердить, что в таблице действительно есть автоинкремент PK и какой это столбец.
Показать ещё 4 комментария
Теги:

1 ответ

2

Если ваш primary_key является идентификатором, вы можете использовать cursor.lastrowid чтобы получить идентификатор последней строки, вставленный в объект курсора, или connection.insert_id() чтобы получить идентификатор из последней вставки в этом соединении.

  • 0
    Я попробовал это. Я даю мне всегда 0.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню