牛骨文教育服务平台(让学习变的简单)
博文笔记

python操作mycat只操作主库

创建时间:2018-10-15 投稿人: 浏览次数:305

测试:

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;

    或者修改配置文件:

1. [mysqld]  
2. 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操作进行。
 

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。