一、前言

这个问题是博主在开发的时候,遇到需要在一个脚本里面连接两个数据库的需求,当时对于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

python2.7可以同时连接两个数据库吗相关推荐

  1. Linq to Entity中连接两个数据库时要注意的问题

    Linq to Entity中连接两个数据库时要注意的问题 今天大学同学问了我一个问题,Linq to Entity中连接两个数据库时,报错"指定的 LINQ 表达式包含对与不同上下文关联的 ...

  2. tp3.2 连接两个数据库

    2019独角兽企业重金招聘Python工程师标准>>> 其实还是比想象简单很多的.手册也有,但是还是要记录一下. 配置文件 'DB_CONFIG1' => array('db_ ...

  3. 使用Visual Studio比较两个数据库、查找差异和更新

    目录 介绍 背景 先决条件  比较两个数据库并找出差异 比较.更新或创建更新脚本 结论 介绍 在本技巧中,我们将学习如何使用Visual Studio中提供的SQL Server数据库项目(模板)比较 ...

  4. 不同服务器数据库表连接查询修改,如何连接多个数据库,mysql中的服务器和查询两个表中的对方?...

    我期待从不同服务器连接两个不同的数据库.此外,我想运行一个查询,从两个数据库中获取数据到一个单一的结果.我正在使用mysql在PHP脚本中执行此操作.这里是如何很期待做[没有成功:)]如何连接多个数据 ...

  5. java两个数据库连表查询语句_Java如何连接多个表并查询表中的数据内容?

    在Java编程中,如何连接多个表并显示表中的数据内容?假定数据库名称是:testdb,其中有两张表:employee和dept,employee表中有4条记录,dept表中有2条记录. 创建数据库表的 ...

  6. springboot连接两个或多个数据库

    一.实现 一般我们的SpringBoot项目只连一个数据库,下面是springboot连接2个以上的数据库方式 这里连得相同数据库,数据库名不一样做区分 1.配置application.yml,添加2 ...

  7. 4.MySQL连接并选择数据库(SQL C)

    在连接了MySQL数据库之后,可以通过SQL命令或者C.PHP.JAVA等程序来指定需要操作的数据库.这里主要介绍SQL命令和相应的C程序. 首先创建用户rick(赋予所有权限) mysql> ...

  8. 如何通过代码连接SQL Server数据库

    我们曾经为南方电网做过几个有关架空线路的科技项目,要趁着假期有整段的空闲时间,把这些代码整理一下,放入团队刚刚重构的代码库中. 由于这些项目使用的数据库为 SQL Server,所以在整理代码之前需要 ...

  9. php mysql两个表合并_php操作mysql两个数据库中表的数据同步

    题记: 我们开发当中经常会遇到,数据同步.比如将teaching数据库中area表的数据同步到study数据库中zone表中. 备注:这两个数据库不同,数据表名字也不同,但数据表的结构相同.不同表结构 ...

最新文章

  1. 算法--------数组类---------总结
  2. php贺卡生成,用php与mysql的电子贺卡程序
  3. 【20171111】Codevs 1064 虫食算80分
  4. Android --- 在Andoird应用程序中打开相册却没有图片(夜神模拟器)怎么办?
  5. varnish介绍以及虚拟机的封装
  6. 中班游戏电子计算机,幼儿园中班数学游戏:小小快递员
  7. bzoj4195(并查集+离散化)
  8. 程序员修仙之路--优雅快速的统计千万级别uv
  9. mysql 使用储存过程_为什么使用mysql储存过程?mysql储存过程简介
  10. Redis4.0.13 安装踩雷记录
  11. zentaoPHP学习
  12. sybase 性能监控及调优(转)
  13. 共享usb接口给虚拟机_多网卡虚拟机如何设置?收藏绝对有用
  14. sqlserver200864位下载_sql server 2008 r2 32位下载-sql server 2008 r2 3264位 中文版 - 河东下载站...
  15. Python+Selenium程序执行完,chrome浏览器自动关闭解决方案
  16. IGBT的驱动功率计算
  17. 用python学概率与统计(第十二章)拟合度检验和独立性检验
  18. Excel如何快速合并相同单元格
  19. VS 2017 解决 C2001错误 常量中有换行符
  20. 【TED笔记】如何掌控你的自由时间

热门文章

  1. “EncoderDecoder: ‘mit_b1 is not in the backbone registry‘“
  2. python调用大华sdk
  3. torch.load No module named
  4. c++ url下载图片
  5. C++使用thread类多线程编程
  6. 高斯混合模型--GMM
  7. 【5】青龙面板系列教程之Nolanjdc的安装【1月17作者删库,不用尝试了】
  8. 17. 搭建FTP服务端
  9. 10版微机监测怎么显示服务器,铁路信号网络版微机监测系统的研究
  10. java自学语法_Java自学笔记(一):基础知识