转载:
原来是因为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.