pymysql allowmultiqueries=true 一次性执行多条不同语句

 在 mysql 驱动的众多属性中,有一个属性叫做 

allowmultiqueries=false  #默认false

这个属性的含义是是否允许一次执行多个查询。 

使用了该参数之后,mysql  可以一次执行多条不同的语句。  语句之间用分号分割。

如下所示:

    from directsql.connector import MysqlPool,MysqlConnection
    from pymysql.constants import CLIENT
    client_flag=CLIENT.MULTI_STATEMENTS
    conn=MysqlConnection(conn_cmd="*******",client_flag=client_flag)
    sql="""
    select id from JL_EXT_3402;
    select count(1) from JL_EXT_3402;
    """
    conn=conn.get_connection()
    cursor=conn.cursor()
    print(cursor.execute(sql))
    print(cursor.fetchall())
    print(cursor.nextset())
    print(cursor.fetchall())
    print(cursor.nextset())
    print(cursor.fetchall())

这时的游标会有多个结果集。可以通过cursor.nextset() 判断是否还有下一个结果集。

可以看到,第一个查询返回了 条数3和3个ID

第二个 查询则返回了总条数。

对此可以将其写成一个通用方法如下:

def get_multiqueries(self,sql,params=None,cursor_type=None):
        """
        同时执行多个sql ,一次性返回所有结果集.
        sql 是以 分号; 进行分割的多条语句
        @queries : [(sql1,param1),(sql2,param2),...]
        @cursor_type : dict or None
        """
        conn = self.get_connection()
        cursor = conn.cursor(DictCursor) if cursor_type == 'dict' else conn.cursor() #此处由于需要返回查询结果集,所以不支持流式游标
        try:
            cursor.execute(sql,params)
            results=[]
            results.append(cursor.fetchall())
            while cursor.nextset():
                results.append(cursor.fetchall())
            conn.commit()#这个要在最后进行提交
            return results
        except Exception  :
            cursor.close()
            conn.rollback()
            traceback.print_exc()
            return False

在一些条件查询里,接口中往往要分页的同时展示符合条件的总条数。 使用这种允许执行多条sql的方式是个不错的解决方案。

下面附 mysql驱动中其他属性的含义。

 JDBC 连接串属性-程序员手册

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值