• mysql中 begin and使用(一次执行多行sql)


    转载:

    https://blog.csdn.net/weixin_42045719/article/details/88116671?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

    原来是因为mysql解释器根据‘;’来结束读取命令执行命令,在多个‘;’号时,解释器不知到在哪一句结束读取命令执行命令,而delimiter的作用是,将sql结束读取命令并执行命令的标志,替换成delimiter后的标志(在本文是‘//’),这样只有当‘//’出现之后,mysql解释器才会执行这段语句。

    delimiter //
    create procedure search_sc1()
    begin
    insert into test1 values (0,'张三0','0');insert into test1 values (1,'张三1','1');insert into test1 values (2,'张三2','2');insert into test1 values (3,'张三3','3');insert into test1 values (4,'张三4','4');

    end //

     存储过程的查看和调用:

    select `name` from mysql.proc where db = 'test_docker' and `type` = 'PROCEDURE';
    call search_sc1();

    是可以在mysql客户端执行了,但是使用python连接mysql 上面的语句不能执行,待解决-----------------------------------

    python操作mysql数据库的代码如下:

    先安装 pip install pymysql

    本来想直接用 游标一次执行多行sql,创建测试数据,发现不行,只能直接在mysql执行存储过程,暂时未找到更好的方法

    import pymysql
    
    conn = pymysql.connect(host='192.168.138.134',port=13307, user='root',password='root',database='test_docker',charset='utf8')
    curs = conn.cursor()
    
    # 利用存储过程一次执行多行sql
    # '''
    # delimiter //
    # create procedure search_sc()
    #     begin
    #        insert into test1 values (0,'张三0','0');insert into test1 values (1,'张三1','1');insert into test1 values (2,'张三2','2');
    #     end //
    # '''
    # sqlstr = '''delimiter //
    #         create procedure search_sc4()
    #         begin
    #         '''
    sqlstr = ''
    for x in range(1):
        sqlstr += "insert into test1 values (%s,'张三%s','%s');" % (x,x,x)
        x = x + 1
    # sqlstr += '''
    #     end //'''
    print(sqlstr)
    res = curs.execute(sqlstr)
    conn.commit()
    print(res)
    

      

    从execl读取数据,更新数据库对应数据

    import xlrd
    
    workBook = xlrd.open_workbook("E:\tools\Python\test\update1.xlsx")
    # 得到整个表格, sheets[0]选择第一个shell
    sheets0 = workBook.sheets()[0]
    print(sheets0)
    # 行数
    nrows = sheets0.nrows
    print(nrows)
    # 列数
    ncols = sheets0.ncols
    print(ncols)
    for x in range(nrows-1):
        # 第x行的第一个字段值
        row_value_id = sheets0.row_values(x + 1)[0]
        row_value_name = sheets0.row_values(x + 1)[1]
        print(x + 1,'---',row_value_id,'---',row_value_name)
        sqlstr = "update test1 set name = '"+str(row_value_name)+"' where id = '"+str(row_value_id)+"';"
        print(sqlstr)
    

    下载pandas 报错  ---预测是因为ssl导致的错误,百度未果

    raise ReadTimeoutError(self._pool, None, "Read timed out.")
    pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.

  • 相关阅读:
    给xml某个节点赋值
    把datatable的某些数据提取出来放在另一个表中
    投资技巧:抛股票有技巧 常用方法介绍
    jquery的实用技巧,非常实用
    我觉得需要关注和跟进的一些.net技术
    公司网站的架构
    uboot移植经历
    ARM处理器中CP15协处理器的寄存器
    uboot 学习 Makefile分析
    uboot移植
  • 原文地址:https://www.cnblogs.com/hqsbrx/p/13427855.html
Copyright © 2020-2023  润新知