iT邦幫忙

0

python 執行store procedure問題請教

  • 分享至 

  • xImage

您好:
網路上一個範例

CREATE PROCEDURE insert_user(IN U_first_name VARCHAR(50), IN U_last_name VARCHAR(50), IN U_email Varchar(50), IN U_gender Varchar(50))
BEGIN
INSERT INTO users (first_name, last_name, email, gender) VALUES (U_first_name, U_last_name, U_email, U_gender);

-- SELECT U_first_name ,U_last_name;

END ;

我python 執行以下程式碼 會過,但資料沒寫入??
可是 我看 id(自動序號),又有往下佔位

import mysql.connector
 
mydb = mysql.connector.connect(
  host="127.0.0.1",       # 数据库主机地址
  user="my",    # 数据库用户名
  passwd="123456",   # 数据库密码
  database="runoob_db",
  auth_plugin='mysql_native_password'
)

mycursor = mydb.cursor();


args =['Jane','Doe','jane.doe@automation.com', 'M'] ;
        # execute the command
mycursor.callproc('insert_user', args);
 

請問,這是哪邊有錯誤嗎?
謝謝!

noway iT邦研究生 3 級 ‧ 2022-08-14 21:50:52 檢舉
您好:
這樣可以過,但一般PROCEDURE 的動作,不應該是 PROC 內完成嗎?
所以後續,只要有用PROC
都要
mydb.commit();

mycursor.close();

mydb.close();
比較保險?
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
一級屠豬士
iT邦大師 1 級 ‧ 2022-08-13 10:02:14
最佳解答

https://dev.mysql.com/doc/connector-python/en/connector-python-example-cursor-transaction.html

裡面有一段

# Make sure data is committed to the database
cnx.commit()

cursor.close()
cnx.close()

insert , update, delete, 這些操作都要用 commit, 來做確認.
否則是會在程式結束,連線脫離時,做 rollback.
平時使用MySQL 好像不需要 commit,是因為設定為 auto commit.

noway iT邦研究生 3 級 ‧ 2022-08-15 21:28:09 檢舉

您好:
這樣可以過,但一般PROCEDURE 的動作,不應該是 PROC 內完成嗎?
所以後續,只要有用PROC
都要
mydb.commit();

mycursor.close();

mydb.close();
比較保險?

這與是不是 procedure 無關, 凡是 update, insert , delete,
都必須要 commit,不然只是這個session自己看得到,離開後也不會寫進去,就是恢復為之前.只是一般使用MySQL 工具大多是auto commit,
而使用其他的driver,就是要明確的commit,close.

noway iT邦研究生 3 級 ‧ 2022-08-22 18:41:53 檢舉

謝謝!

0
海綿寶寶
iT邦大神 1 級 ‧ 2022-08-13 11:15:02

改成

args = ('Jane','Doe','jane.doe@automation.com', 'M')

試試看

是說
python 列尾要加分號嗎
/images/emoticon/emoticon19.gif

noway iT邦研究生 3 級 ‧ 2022-08-14 21:49:00 檢舉

您好:改用(),沒效..

WQ iT邦新手 2 級 ‧ 2022-08-18 14:42:58 檢舉

改這樣呢?我猜陣列它接不上.....
mycursor.callproc('insert_user','Jane','Doe','jane.doe@automation.com', 'M');
再不然PL/SQL要接array....

我要發表回答

立即登入回答