python2.7可以同时连接两个数据库吗

一、前言

      这个问题是博主在开发的时候,遇到需要在一个脚本里面连接两个数据库的需求,当时对于python2.7不是很熟悉,所以想要在网上搜一下python2.7是否可以同时连接两个数据库,只是并没有一个明确的答案。加上当时脚本一直报错,所以导致博主很怀疑是否同时连接两个数据库是不合理的。。

      只是python作为一个成熟的语言,同时连接多个数据库本来就是手到擒来的问题。本篇首先是要回答,python是可以连接多个数据库的,其次是记录一下操作数据库出现的问题。

二、双数据库操作遇到的bug

1、大致步骤


//连接
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就死活不成功,此时的脚本并没有报错。

2、打印相关信息

(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的。

四、总结

1、时刻谨记各个组件的原理,比如这次的问题,明明是mysql的innodb引擎问题,但是博主
关心则乱,因为对Python不熟悉,就病急乱投医,实在是不该。
2、出门在外靠朋友,遇到Bug找大佬
3、多加一些qq群,微信群之类的,哈哈

end

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铁柱同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值