久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

python2.7可以同時(shí)連接兩個(gè)數(shù)據(jù)庫嗎

 千鋒Python學(xué)堂 2019-10-16

一,、前言

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

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

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

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

python2.7可以同時(shí)連接兩個(gè)數(shù)據(jù)庫嗎

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

(1)打印db2的信息

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

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

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

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

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

(3)打印返回值

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

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

三、問題所在

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

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

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

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

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

四,、總結(jié)

時(shí)刻謹(jǐn)記各個(gè)組件的原理,比如這次的問題,,明明是mysql的innodb引擎問題,,但是博主

關(guān)心則亂,因?yàn)閷?duì)Python不熟悉,就病急亂投醫(yī),,實(shí)在是不該,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多