Python 官方文档:入门教程 => 点击学习
本篇内容主要讲解“python2.7能不能同时连接两个数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python2.7能不能同时连接两个数据库”吧!一、前言这个问题是本人在开发的时候,遇到
本篇内容主要讲解“python2.7能不能同时连接两个数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python2.7能不能同时连接两个数据库”吧!
一、前言
这个问题是本人在开发的时候,遇到需要在一个脚本里面连接两个数据库的需求,当时对于python2.7不是很熟悉,所以想要在网上搜一下python2.7是否可以同时连接两个数据库,只是并没有一个明确的答案。加上当时脚本一直报错,所以导致本人很怀疑是否同时连接两个数据库是不合理的。。
只是python作为一个成熟的语言,同时连接多个数据库本来就是手到擒来的问题。本篇首先是要回答,python是可以连接多个数据库的,其次是记录一下操作数据库出现的问题。
二、双数据库操作遇到的bug
大致步骤
//连接db1 = MySQLdb.connect(host=dbhost, user=dbuser, passwd=dbpass, db=dbname, port=dbport)db2 = Mysqldb.connect(host=slavehost, user=slaveuser, passwd=slavepass, db=slavedb, port=dbport)//获取cursor对象cursor = db1.cursor()cursor_build = db2.cursor()//操作数据库cursor.execute(sql1)cursor_build.execute(sql2)//结果db1操作成功,db2操作无响应
如步骤所示,本人在操作的时候,发现db1是可以正常执行的,但是到db2就死活不成功,此时的脚本并没有报错。
打印相关信息
(1)打印db2的信息
mysql实例:<MySQLdb.cursors.Cursor object at 0x0000000002DA9908>
sql打印:直接在数据库中执行sql无报错
(2)打印cursor 对象
<_mysql.connection open to 'localhost' at 0000000002D42458><_mysql.connection open to 'localhost' at 0000000002D42E78>
可以看到两个数据库都是有cursor 对象的,而且并没有什么明显的差异,都能正常操作数据库才对
(3)打印返回值
result = db2.execute(insert_build_sql) # 插入数据print result
返回结果是1 ,代表受影响行数是1,但是实际上数据库并没有插入进去。关键是db1还是插入成功了,简直是无语。
三、问题所在
正在本人疯狂搜索无果的时候,一个py大佬刚好在群上发消息,本人果断抓住机会询问这个博主,最终解决了这个问题。
咨询py大佬们,有个大佬问是否开启了autocommit,这肯定是没有的。本来db1能插入成功,本人就想当然以为db2也能插入成功,不需要手动commit之类的。然而还是小看了python,后来百度查询才知道,MySQLdb 在连接后关闭了自动提交,行叭,很强势。
在连接完db之后,新增autocommit属性,设置自动提交
db1.autocommit(1) db2.autocommit(1)
继续测试,发现完美写入。不过通过这件事也能发现mysqldb操作mysql的一些特性,一般来说,当只连接一个库的时候,是可以进行正常的增删改查的。但是当连接多个库的时候,如果不显式设置autocommit的话,mysqldb 会自动在语句执行完加一句 set autocommit = 0。众所周知的是innodb引擎的操作都是带有事务特性的,关闭自动提交自然是无法成功执行sql的。
到此,相信大家对“python2.7能不能同时连接两个数据库”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
--结束END--
本文标题: python2.7能不能同时连接两个数据库
本文链接: https://lsjlt.com/news/228554.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0