老师,为什么这里只是插入一条数据?

老师,为什么这里只是插入一条数据?

老师,我第一次没有加入开启事物,就写入不了数据,不是说一条sql时会自动执行吗?2条sql才要手动开启?

还有就是我这里为什么只插入了一条数据?


import mysql.connector.pooling
config={
"host":"localhost",
   "port":3306,
   "user":"root",
   "password":"770088ljm",
   "database":"demo"
}
try:
pool=mysql.connector.pooling.MySQLConnectionPool(
**config,
       pool_size=10
   )
con=pool.get_connection()
con.start_transaction()
cursor=con.cursor()
sql="INSERT INTO t_dept(deptno,dname,loc) VALUES(%s,%s,%s)"
   cursor.execute(sql,[50,"A部门","上海"],[60,"B部门","北京"])
con.commit()
except Exception as e:
if "con" in dir()
con.rollback()
print(e)


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,只要有开启,就得提交,它是不会自动提交的。除非你没有开启,那么也不需要提交。

http://img1.sycdn.imooc.com//climg/5fa2210209e5c4a403700246.jpg

  • 慕姐2131352 提问者 #1
    我一开始没有写开启事物,然后这行后,数据库没有变化,不是说有2条sql才需要手动开启吗?为什么这里一条也要开启? 还有一个问题,就是我加了如事情,我的代码为什么只执行了一个结果?
    2020-11-04 11:40:06
  • 好帮手慕雪 回复 提问者 慕姐2131352 #2
    1)“我一开始没有写开启事物,然后这行后,数据库没有变化”不可能的,如果你没加事务,执行cursor.execute()肯定是有变化的,你可以刷新一下数据库再看看。 2)“为什么这里一条也要开启?”有时需要用到事务的隔离性。如果你的数据库是多个线程在操作,那可能就会带来数据的不一致。所以有时虽然只有一条SQL,也要加事务。 3)“我的代码为什么只执行了一个结果”因为你只执行了一条SQL,就是cursor.execute()那里。
    2020-11-04 17:15:43
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师