“ SELECT LAST_INSERT_ID()”处出现语法错误

时间:2018-06-30 07:37:33

标签: python mysql python-2.7 sqlalchemy navicat

如果我在python中运行查询,它将返回语法错误。

但是,如果我使用navicat来运行它,那很好。

为什么它不能在python中运行?

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:在字符串格式化期间并非所有参数都已转换

1 个答案:

答案 0 :(得分:1)

通过连接进行操作,以获取光标对象上插入的最后一行ID,

您可以使用

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中拥有您的ID

但是您必须从sql_query中删除SELECT LAST_INSERT_ID();