python操作mycat只操作主库【解决办法】
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                python操作mycat只操作主库【解决办法】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                python操作mycat只操作主庫
測試:
1、將數據庫配置成主從賦值,mycat實現讀寫分離;
2、使用python對數據庫進行操作;
3、主從數據庫都打開general_log,查看數據庫查詢日志。
實驗結果:
使用mysqldb和pymysql庫,不管什么操作,mycat都將操作路由到了主庫來執行。
原因:
使用python第三方庫,mysqldb和pymysql都會默認開啟事務來執行sql語句。也就是常用的執行方法,如下:cursor.execute(sql_1) cursor.execute(sql_2) #至此sql還沒有到數據庫中執行 cursor.commit() #commit后所有sql才會生效也就是說,操作中包含了一種事務處理的機制。但是,mycat對于顯式事務來說,只會路由到主庫上執行,所以就會造成,python操作mycat的時候,mycat總是將操作路由到主庫。 復制代碼解決辦法:
mysql方面開啟:autocommit。查詢方式以及設置如下:select @@autocommit; set @@autocommit=1;或者修改配置文件: 復制代碼[mysqld]
init_connect='SET autocommit=0'
一下提供三種第三方庫操作數據庫的處理方式:
mysqldb
#在連接數據庫后 conn.autocommit(1) #并且在執行完execute之后,不用進行commit操作。 復制代碼pymysql
conn = pymysql.connect(host='192.168.1.2', user='root', password='1',db='test', port=8066, charset='utf8',autocommit=True) #并且在執行完execute之后,不用進行commit操作。 復制代碼sqlalchemy
#連接的時候 mysql+pymysql://user:password@host:port/db?charset=foo&autocommit=true 復制代碼以上操作,建議只對select操作進行。
總結
以上是生活随笔為你收集整理的python操作mycat只操作主库【解决办法】的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Java并发编程(五):Java线程安全
- 下一篇: linux之NTP服务
