pymysql如何为存储过程传递参数
pymysql how to pass parameters for a stored procedure
我正在尝试使用 csv 作为数据源并从 mysql 数据库调用存储过程来填充数据库。我目前收到异常:发生异常:(1318, 'Incorrect number of arguments for PROCEDURE mydb.update_servers; expected 3, got 0')
import pymysql
#import myconnutils
import datetime
import xlrd
import re
import os
import csv
#open csv file
with open('DBstatus.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
print(row['Host Name'], row["OS Type"], row['Host Description'])
#create database connection
databaseConnection = pymysql.connect(host='localhost', user='xxx', password='xxx', db='mydb', cursorclass= pymysql.cursors.DictCursor)
try:
cursorObject = databaseConnection.cursor()
# parms = (row['Host Name'], row["OS Type"], row['Host Description'])
# resultArgs = cursor.callproc('update_servers', inOutParams)
cursorObject.execute("call update_servers")
for result in cursorObject.fetchall():
print(result)
except Exception as e:
print("exception occured: {}".format (e))
finally:
databaseConnection.close()
存储过程:
CREATE DEFINER=`root`@`%` PROCEDURE `update_servers`(
IN p_name varchar(100),
IN p_software_name varchar(100),
IN p_description varchar(250)
)
BEGIN
INSERT INTO servers (name, software_name, description)
VALUES (p_name, p_software_name,
p_description);
SELECT LAST_INSERT_ID() into @recordId;
SET @retVal = CAST(@recordId AS UNSIGNED);
SELECT @retVal;
END
您没有将任何参数传递给您的过程,即使它需要三个参数(p_name
、p_software_name
和 p_description
),因此出现错误。尝试:
params = row['Host Name'], row["OS Type"], row['Host Description']
cursorObject.execute("call update_servers(?, ?, ?)", params)
尽管我建议使用 官方 MySQL connector which has a special cursor case for stored procedures as you already have it commented out - MySQLCursor.callproc()
我正在尝试使用 csv 作为数据源并从 mysql 数据库调用存储过程来填充数据库。我目前收到异常:发生异常:(1318, 'Incorrect number of arguments for PROCEDURE mydb.update_servers; expected 3, got 0')
import pymysql
#import myconnutils
import datetime
import xlrd
import re
import os
import csv
#open csv file
with open('DBstatus.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
print(row['Host Name'], row["OS Type"], row['Host Description'])
#create database connection
databaseConnection = pymysql.connect(host='localhost', user='xxx', password='xxx', db='mydb', cursorclass= pymysql.cursors.DictCursor)
try:
cursorObject = databaseConnection.cursor()
# parms = (row['Host Name'], row["OS Type"], row['Host Description'])
# resultArgs = cursor.callproc('update_servers', inOutParams)
cursorObject.execute("call update_servers")
for result in cursorObject.fetchall():
print(result)
except Exception as e:
print("exception occured: {}".format (e))
finally:
databaseConnection.close()
存储过程:
CREATE DEFINER=`root`@`%` PROCEDURE `update_servers`(
IN p_name varchar(100),
IN p_software_name varchar(100),
IN p_description varchar(250)
)
BEGIN
INSERT INTO servers (name, software_name, description)
VALUES (p_name, p_software_name,
p_description);
SELECT LAST_INSERT_ID() into @recordId;
SET @retVal = CAST(@recordId AS UNSIGNED);
SELECT @retVal;
END
您没有将任何参数传递给您的过程,即使它需要三个参数(p_name
、p_software_name
和 p_description
),因此出现错误。尝试:
params = row['Host Name'], row["OS Type"], row['Host Description']
cursorObject.execute("call update_servers(?, ?, ?)", params)
尽管我建议使用 官方 MySQL connector which has a special cursor case for stored procedures as you already have it commented out - MySQLCursor.callproc()