Python 使用last_INSERT_ID()将上次创建的自动增量值插入表中

Python 使用last_INSERT_ID()将上次创建的自动增量值插入表中,python,mysql,foreign-keys,innodb,Python,Mysql,Foreign Keys,Innodb,我有一张面积表,可能有很多地区。创建表格时,我已将区域id设置为自动递增 我已经尝试了在internet上使用最后一个\u INSERT\u ID()找到的所有解决方案,但都不起作用。我收到一个错误,没有定义LAST_INSERT_ID(),语法不正确或不同步错误 我正在使用python和mysql 当前执行(“”) 将忽略插入区域1\u tb( 身份证件 区域1 )值(%s,%s)“”, (无,区域1) 当前执行(''将忽略插入到区域\u tb( 身份证件 第1区, 区域1\u id )值(%

我有一张面积表,可能有很多地区。创建表格时,我已将区域id设置为自动递增

我已经尝试了在internet上使用最后一个\u INSERT\u ID()找到的所有解决方案,但都不起作用。我收到一个错误,没有定义LAST_INSERT_ID(),语法不正确或不同步错误

我正在使用python和mysql

当前执行(“”) 将忽略插入区域1\u tb( 身份证件 区域1 )值(%s,%s)“”, (无,区域1) 当前执行(''将忽略插入到区域\u tb( 身份证件 第1区, 区域1\u id )值(%s,%s,%s)“”, (无,区1,选择最后一个插入ID(),)
我需要将1区tb的id链接到1区tb的id,但我不断收到错误。

您非常接近。不要
选择上次插入ID()
。只要利用它的价值。它是MySQL的SQL方言中的一个函数

试试这个:

cur.execute('''
        INSERT IGNORE INTO area1_tb (
        id,
        area1            
        ) VALUES (%s, %s)''',
        (None, area1,))

cur.execute('''INSERT IGNORE INTO district_tb (
        id,
        district1,
        area1_id
        ) VALUES (%s, %s, LAST_INSERT_ID())''',
        (None, district1,))
而且,如果要在单个区域中插入多个区域,请尝试将区域插入的id存储在MySQL变量中,以便可以重用它:

cur.execute('''
        INSERT IGNORE INTO area1_tb (
        id,
        area1            
        ) VALUES (%s, %s)''',
        (None, area1,))

cur.execute('SET @areaId := LAST_INSERT_ID()', Params=None)

cur.execute('''INSERT IGNORE INTO district_tb (
        id,
        district1,
        area1_id
        ) VALUES (%s, %s, @areaId)''',
        (None, district1,))
cur.execute('''INSERT IGNORE INTO district_tb (
        id,
        district1,
        area1_id
        ) VALUES (%s, %s, @areaId)''',
        (None, district2,))
cur.execute('''INSERT IGNORE INTO district_tb (
        id,
        district1,
        area1_id
        ) VALUES (%s, %s, @areaId)''',
        (None, district3,))

后续插入将覆盖最后一个\u INSERT\u ID(),因此您需要将其保存以重新使用。

当您请求错误帮助时,可能会出现重复的错误,值得包含准确的错误消息。谢谢,我会记住这一点哦,天哪,它起作用了!谢谢!我已经花了好几天的时间来做这件事,我一直都很亲密。再次感谢!是的,编程SQL的麻烦在于所有的混合语言。有时很难弄清楚任何一大块文本使用的是哪种语言。我从来没有见过一个IDE可以判断字符串何时是SQL片段并检查它。