溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

python2.7能不能同時(shí)連接兩個(gè)數(shù)據(jù)庫(kù)

發(fā)布時(shí)間:2021-09-04 10:16:40 來(lái)源:億速云 閱讀:125 作者:chen 欄目:編程語(yǔ)言

本篇內(nèi)容主要講解“python2.7能不能同時(shí)連接兩個(gè)數(shù)據(jù)庫(kù)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“python2.7能不能同時(shí)連接兩個(gè)數(shù)據(jù)庫(kù)”吧!

一、前言

這個(gè)問(wèn)題是本人在開(kāi)發(fā)的時(shí)候,遇到需要在一個(gè)腳本里面連接兩個(gè)數(shù)據(jù)庫(kù)的需求,當(dāng)時(shí)對(duì)于python2.7不是很熟悉,所以想要在網(wǎng)上搜一下python2.7是否可以同時(shí)連接兩個(gè)數(shù)據(jù)庫(kù),只是并沒(méi)有一個(gè)明確的答案。加上當(dāng)時(shí)腳本一直報(bào)錯(cuò),所以導(dǎo)致本人很懷疑是否同時(shí)連接兩個(gè)數(shù)據(jù)庫(kù)是不合理的。。

只是python作為一個(gè)成熟的語(yǔ)言,同時(shí)連接多個(gè)數(shù)據(jù)庫(kù)本來(lái)就是手到擒來(lái)的問(wèn)題。本篇首先是要回答,python是可以連接多個(gè)數(shù)據(jù)庫(kù)的,其次是記錄一下操作數(shù)據(jù)庫(kù)出現(xiàn)的問(wèn)題。

二、雙數(shù)據(jù)庫(kù)操作遇到的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對(duì)象
cursor = db1.cursor()
cursor_build = db2.cursor()
//操作數(shù)據(jù)庫(kù)
cursor.execute(sql1)
cursor_build.execute(sql2)
//結(jié)果
db1操作成功,db2操作無(wú)響應(yīng)

如步驟所示,本人在操作的時(shí)候,發(fā)現(xiàn)db1是可以正常執(zhí)行的,但是到db2就死活不成功,此時(shí)的腳本并沒(méi)有報(bào)錯(cuò)。

2、打印相關(guān)信息

(1)打印db2的信息

mysql實(shí)例:<MySQLdb.cursors.Cursor object at 0x0000000002DA9908>

sql打?。褐苯釉跀?shù)據(jù)庫(kù)中執(zhí)行sql無(wú)報(bào)錯(cuò)

(2)打印cursor 對(duì)象

<_mysql.connection open to 'localhost' at 0000000002D42458>
<_mysql.connection open to 'localhost' at 0000000002D42E78>

可以看到兩個(gè)數(shù)據(jù)庫(kù)都是有cursor 對(duì)象的,而且并沒(méi)有什么明顯的差異,都能正常操作數(shù)據(jù)庫(kù)才對(duì)

(3)打印返回值

result = db2.execute(insert_build_sql) # 插入數(shù)據(jù)
print result

返回結(jié)果是1 ,代表受影響行數(shù)是1,但是實(shí)際上數(shù)據(jù)庫(kù)并沒(méi)有插入進(jìn)去。關(guān)鍵是db1還是插入成功了,簡(jiǎn)直是無(wú)語(yǔ)。

三、問(wèn)題所在

正在本人瘋狂搜索無(wú)果的時(shí)候,一個(gè)py大佬剛好在群上發(fā)消息,本人果斷抓住機(jī)會(huì)詢(xún)問(wèn)這個(gè)博主,最終解決了這個(gè)問(wèn)題。

咨詢(xún)py大佬們,有個(gè)大佬問(wèn)是否開(kāi)啟了autocommit,這肯定是沒(méi)有的。本來(lái)db1能插入成功,本人就想當(dāng)然以為db2也能插入成功,不需要手動(dòng)commit之類(lèi)的。然而還是小看了python,后來(lái)百度查詢(xún)才知道,MySQLdb 在連接后關(guān)閉了自動(dòng)提交,行叭,很強(qiáng)勢(shì)。

在連接完db之后,新增autocommit屬性,設(shè)置自動(dòng)提交

 db1.autocommit(1)
 db2.autocommit(1)

繼續(xù)測(cè)試,發(fā)現(xiàn)完美寫(xiě)入。不過(guò)通過(guò)這件事也能發(fā)現(xiàn)mysqldb操作mysql的一些特性,一般來(lái)說(shuō),當(dāng)只連接一個(gè)庫(kù)的時(shí)候,是可以進(jìn)行正常的增刪改查的。但是當(dāng)連接多個(gè)庫(kù)的時(shí)候,如果不顯式設(shè)置autocommit的話,mysqldb 會(huì)自動(dòng)在語(yǔ)句執(zhí)行完加一句 set autocommit = 0。眾所周知的是innodb引擎的操作都是帶有事務(wù)特性的,關(guān)閉自動(dòng)提交自然是無(wú)法成功執(zhí)行sql的。

到此,相信大家對(duì)“python2.7能不能同時(shí)連接兩個(gè)數(shù)據(jù)庫(kù)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI