使用Python的pymysql插入数据返回成功但数据库没有数据,ID却自增了

大家好,我是专职Android研发,有14年研发经验,其中Android研发经验已经有10年。
曾任职上市公司,有车机导航、机器人等行业及研发经验,热衷于技术和研发。
除Android专业外,也研究并使用Python、PHP、JavaScript、前端、中间件、数据库等技术。
目前开始通过博客对自己的知识和经验进行归纳和总结,由于工作较忙,不定期去更新博客。
希望本博客的内容能够真正帮助到一些同学。
个人博客:Dzboy的日志

问题

最近在使用Python的pymysql时,遇到了插入数据后数据丢失的问题:
现象是这样,执行Insert语句,返回1成功,但是数据库查看并没有此数据
当我用sqlyog连上数据库后,在sqlyog中执行插入语句就正常插入,并且发现自增的ID已经不是连续的
当我再次尝试用python插入一条后再用sqlyog插入,发现ID确实是已经自增过了。

解决方案

默认情况下,Connector/Python关闭autocommit
所以,在执行sql后,有必要使用connectcommit()方法提交更改。也可以使用rollback()方法回滚。

class DB
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在pymysql模块中,可以使用cursor对象的lastrowid属性来获取最后插入的行的id。例如: ``` import pymysql conn = pymysql.connect(host='localhost', user='root', password='123456', database='testdb') cursor = conn.cursor() sql = "INSERT INTO users (name, age) VALUES ('John', 25)" cursor.execute(sql) # 获取插入id last_id = cursor.lastrowid print(last_id) conn.commit() cursor.close() conn.close() ``` 在上面的例子中,我们先执行了一条insert语句,然后通过cursor对象的lastrowid属性获取了插入id。注意,获取插入id的前提是在执行insert语句之前开启了一个连接,并且在执行完insert语句后进行了commit操作。 ### 回答2: 在pymysql模块中,执行insert语句后,可以使用`lastrowid`属性来获取插入数据id。 首先,我们需要建立数据库连接,并创建一个游标对象。然后,使用游标对象执行insert语句,例如: ```python # 导入pymysql模块 import pymysql # 建立数据库连接 conn = pymysql.connect(host='localhost', port=3306, user='root', password='password', db='test') # 创建游标对象 cursor = conn.cursor() # 执行insert语句 sql = "INSERT INTO table_name (column1, column2) VALUES ('value1', 'value2')" cursor.execute(sql) # 获取插入数据id insert_id = cursor.lastrowid # 提交事务 conn.commit() # 关闭游标和数据库连接 cursor.close() conn.close() # 输出插入数据id print("插入数据id为:", insert_id) ``` 在执行`cursor.lastrowid`时,会返回最后插入数据自增id。 需要注意的是,使用`cursor.lastrowid`方法只能在插入数据之后调用,如果在执行insert语句之前调用该方法,它将返回0。另外,使用`lastrowid`属性的前提是表中有自增id字段,且该字段的值为自增。如果表中没有自增id字段,则`lastrowid`方法将返回0。 以上是通过pymysql模块执行insert返回插入数据id的方法。 ### 回答3: 在pymysql模块中,执行insert语句后获取插入数据id可以通过两种方式实现。 第一种方式是使用"SELECT LAST_INSERT_ID()"语句查询最后插入数据id。具体步骤如下: 1. 执行insert语句,插入数据数据库。 2. 使用cursor对象的execute()方法执行"SELECT LAST_INSERT_ID()"语句。 3. 使用cursor对象的fetchone()方法获取查询结果。 4. 最后插入数据id就可以通过查询结果获得。 示例代码如下: ```python import pymysql # 连接数据库 conn = pymysql.connect(host='localhost', user='root', password='password', database='testdb') # 创建游标对象 cursor = conn.cursor() # 执行insert语句 cursor.execute("INSERT INTO table_name (column1, column2) VALUES (%s, %s)", ("value1", "value2")) # 查询最后插入数据id cursor.execute("SELECT LAST_INSERT_ID()") result = cursor.fetchone() inserted_id = result[0] # 关闭游标和数据库连接 cursor.close() conn.close() # 输出插入数据id print(inserted_id) ``` 第二种方式是使用pymysql的connection对象的insert_id属性获取最后插入数据id。具体步骤如下: 1. 执行insert语句,插入数据数据库。 2. 使用connection对象的insert_id属性获取最后插入数据id。 示例代码如下: ```python import pymysql # 连接数据库 conn = pymysql.connect(host='localhost', user='root', password='password', database='testdb') # 创建游标对象 cursor = conn.cursor() # 执行insert语句 cursor.execute("INSERT INTO table_name (column1, column2) VALUES (%s, %s)", ("value1", "value2")) # 获取最后插入数据id inserted_id = conn.insert_id() # 关闭游标和数据库连接 cursor.close() conn.close() # 输出插入数据id print(inserted_id) ``` 无论使用哪种方式,都需要在执行insert语句之后立即获取插入数据id,才能获得正确的结果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值