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;

    或者修改配置文件:

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操作进行。
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值