【问题标题】:pymysql how to pass parameters for a stored procedurepymysql如何为存储过程传递参数
【发布时间】:2018-09-19 15:34:59
【问题描述】:

我正在尝试使用 csv 作为数据源并从 mysql 数据库调用存储过程来填充数据库。我目前遇到异常:发生异常:(1318,'PROCEDURE mydb.update_servers 的参数数量不正确;预期为 3,得到 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

【问题讨论】:

    标签: python python-3.x pymysql


    【解决方案1】:

    即使它需要三个参数(p_namep_software_namep_description),您也没有向您的过程传递任何参数,因此会出现错误。试试:

    params = row['Host Name'], row["OS Type"], row['Host Description']
    cursorObject.execute("call update_servers(?, ?, ?)", params)
    

    虽然我建议使用 official MySQL connector,它对存储过程有一个特殊的游标大小写,因为您已经将它注释掉了 - MySQLCursor.callproc()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      相关资源
      最近更新 更多