您好,登錄后才能下訂單哦!
本篇內容主要講解“python2.7能不能同時連接兩個數據庫”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“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的。
到此,相信大家對“python2.7能不能同時連接兩個數據庫”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。