Python 如何在更新时获取最后一行id?
我是mysql的初学者,可能是我的错,我不知道如何解决这个问题。 这是我的表的结构:-Python 如何在更新时获取最后一行id?,python,mysql,sql,mysql-python,Python,Mysql,Sql,Mysql Python,我是mysql的初学者,可能是我的错,我不知道如何解决这个问题。 这是我的表的结构:- CREATE TABLE `nearest_product_type` ( `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `created` datetime NOT NULL, `modified` datetime NOT NULL, `name` varchar(15) NOT NULL UNIQUE ) ; 这是我
CREATE TABLE `nearest_product_type` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
`name` varchar(15) NOT NULL UNIQUE
)
;
这是我正在尝试的代码:-
base = MySQLdb.connect (host="localhost", user = "root", passwd = "sheeshmohsin", db="points")
basecursor = base.cursor()
queryone = """INSERT INTO nearest_product_type (name,created,modified) VALUES (%s,%s,%s) ON DUPLICATE KEY UPDATE name=name """
category = "Indica"
valueone = (category,datetime.datetime.now(),datetime.datetime.now())
basecursor.execute(queryone, valueone)
product_id = basecursor.lastrowid
basecursor.close()
base.commit()
base.close()
print product_id
在第一次运行这个python脚本时,当category不唯一时,它可以正常工作,但在第一次使用相同的category再次运行时,最后一行id返回0。但是我需要更新的最后一行的id
当我检查表中的行时,自动递增也起作用,假设我运行脚本四次,第一次当category是唯一的时,id是1,假设第四次出现另一个唯一的category,那么分配给这一行的id是4,但它应该是2,因为它是第二行。如何解决此问题?此处的“复制密钥更新”部分将不起作用,因为该密钥是“自动增量”列,它将永远不会获得重复项 几乎可以肯定的是,这个子句导致了意外的计数,特别是考虑到name的唯一设置
您可以尝试使用类似“从最近的产品类型中选择最大值(id)”的方法来添加最后一个id。访问数据库的方式有问题。当您尝试使用已存在的名称在数据库中插入新行时,由于列名被声明为唯一的,因此插入将失败 如果要修改现有行,必须使用
UPDATE
语句,而不是INSERT
语句。SQL中没有任何东西可以进行插入或更新
自动增量中的任何内容都不能保证id是连续的。您所知道的是,数据库将允许为每个插入的行使用不同的id,但插入失败(在您的情况下也是如此)的结果是id序列
此外,一些驱动程序可能允许预先保留ID,特别是网络连接,以允许客户端连接获得一组ID,以防插入多行。在这种情况下,如果另一个客户机请求id,并且两个客户机交替插入行,则id将不会跟随插入时间。阅读问题,我想这可能会有所帮助。