轉載:
原來是因為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.
