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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章