синтаксическая ошибка в 'SELECT LAST_INSERT_ID()'

Если я запускаю свой запрос в python, он возвращает синтаксическую ошибку.

Однако, если я запускаю это с помощью navicat, все работает нормально.

Почему не работает на питоне?

sql_query

INSERT INTO
    solarsystem
    (
        solarsystemName,
        solarsystemPositionX,
        solarsystemPositionY,
        solarsystemSectorId,
        solarsystemAngle
    ) 
VALUES 
    ('Lima [698/562]',698,562,13,171);

SELECT LAST_INSERT_ID();

ошибка

1064, u"У вас есть ошибка в синтаксисе SQL; обратитесь к руководству, которое соответствует версии вашего сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'SELECT LAST_INSERT_ID()'


[ИЗМЕНИТЬ]

create.py

[...]

args = (solarsytem['solarsystemName'], solarsytem['x_pos'], solarsytem['y_pos'],
        solarsytem['sector_id'], solarsytem['angle'])

with self.engine.begin() as connection:
    result_proxy = connection.execute(sql_query, args).first()

[...]

ОБНОВЛЕНИЕ

Если я попробую INSERT как одиночный запрос, это сработает.

Однако SELECT LAST_INSERT_ID(); не сработало. Он возвращает:

TypeError: не все аргументы преобразуются при форматировании строки


person Luca    schedule 30.06.2018    source источник
comment
Помогите нам помочь вам — поделитесь своим кодом Python   -  person Mureinik    schedule 30.06.2018
comment
Вы пытались выполнить эти два оператора с двумя отдельными вызовами execute?   -  person Mureinik    schedule 30.06.2018
comment
Да, если я запускаю SELECT LAST_INSERT_ID() FROM solarsystem ;, он возвращает TypeError: не все аргументы преобразуются во время форматирования строки (я запускаю это без аргументов), но в Navicat это всегда работает   -  person Luca    schedule 30.06.2018


Ответы (1)


Сделайте это через ваше соединение, чтобы получить последний идентификатор строки, вставленный в объект курсора,

Вы можете использовать

connection.insert_id()

Или, если у вас есть курсор:

cursor.lastrowid 

ИЗМЕНИТЬ

Для sqlalchemy вы можете использовать:

with self.engine.begin() as connection:
        result_proxy = connection.execute(sql_query, args).first()
        last_id=result_proxy.inserted_primary_key[0]

И у вас будет ваш идентификатор в last_id

Но вы должны удалить SELECT LAST_INSERT_ID(); из вашего sql_query

person nacho    schedule 30.06.2018
comment
AttributeError: объект «Соединение» не имеет атрибута «insert_id» - person Luca; 30.06.2018
comment
Используйте connection.lastrowid, потому что вы дали своему курсору имя соединения - person nacho; 30.06.2018
comment
AttributeError: Объект «Connection» не имеет атрибута «lastrowid» connection = self.engine.connect() — это соединитель, а не курсор. Или я понял это неправильно? - person Luca; 30.06.2018
comment
Как это работает? Я делаю INSERT, и ничего не возвращается. Это следующая ошибка: Этот объект результата не возвращает строки - person Luca; 01.07.2018