Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何解决存储过程抛出的这个错误1241?_Python_Mysql_Python 3.x_Mariadb 10.4 - Fatal编程技术网

Python 如何解决存储过程抛出的这个错误1241?

Python 如何解决存储过程抛出的这个错误1241?,python,mysql,python-3.x,mariadb-10.4,Python,Mysql,Python 3.x,Mariadb 10.4,在Python3.x中,我有一个定义如下的类 def sproc(self, sql, *args): self.__open() self.__session.callproc(sql, args) number_rows = self.__session.rowcount number_columns = len(self.__session.description) if num

在Python3.x中,我有一个定义如下的类

     def sproc(self, sql, *args):
          self.__open()
          self.__session.callproc(sql, args)
          number_rows = self.__session.rowcount
          number_columns = len(self.__session.description)

          if number_rows >= 1 and number_columns > 1:
               result = [item for item in self.__session.fetchall()]
          else:
               result = [item[0] for item in self.__session.fetchall()]
          self.__close
          return result
在我的workhorse.py脚本中,我定义了调用
sproc

def tradepl(user_id, play_entry_id, play_exit_id):
    try:
        db_cnx = db(dbconfig.database_configuration['host']
        , dbconfig.database_configuration['user']
        , dbconfig.database_configuration['password']
        , dbconfig.database_configuration['database'])

        args = (user_id, play_entry_id, play_exit_id)
        result = db_cnx.sproc('lastpl', args)
        return result

    except Exception as err:
        print(err)
lastpl是一个具有以下功能的存储过程:

DELIMITER //

CREATE PROCEDURE lastPl (user_id int, play_entry_id int, play_exit_id int, OUT profit_dollar decimal(10,2), OUT profit_percent decimal(10,2), OUT days_in_trade int)
BEGIN

/**** get profit and loss data from the closing trade ****/

    select
    case p1.entry_transaction_type when 'sto' then (p1.entry_cost - p2.exit_cost)
                else (p2.exit_cost - p1.entry_cost)
                END profit_dollar
    , case p1.entry_transaction_type when 'sto' then (((p1.entry_cost - p2.exit_cost)/p1.entry_cost) * 100)
                else (((p2.exit_cost - p1.entry_cost)/p1.entry_cost) * 100)
                END profit_percent
    , datediff(p1.entry_date, p2.exit_date) days_in_trade
    from play_entry p1
    join play_exit p2
        on p1.play_entry_id = p2.play_entry_id
    where p1.user_id = user_id
    and p1.play_entry_id = play_entry_id
    and p2.play_exit_id = play_exit_id;

END //

DELIMITER ;
当我调用tradepl定义时,我得到一个错误:

output = tradepl(user_id[0], play_entry_id[0], play_exit_id)
for row in output:
    profit_dollar = row[0]
    profit_percent = row[1]
    day_in_trade = row[2]
(1241,‘操作数应包含1列)
“非类型”对象不可编辑

我在整个过程中花了大约5个小时,几乎筋疲力尽。google/duckduck上的搜索结果与我试图实现的目标不匹配


任何帮助都将不胜感激。thx

我称之为“输出中的行的输出=tradepl(用户id[0],播放进入id[0],播放退出id):利润=行[0]利润百分比=行[1]天交易=行[2]”,我不确定这是否发生在你身上,然而,这是一个问题的答案,有人在调用存储过程时遇到问题。@alan,我可以让它在定义中工作,就像您链接到我的示例一样。但是在我的例子中,我有自己的类,并且喜欢通过那里进行调用。如果在
tradepl()
o man中把'args=(user\u id,play\u entry\u id,play\u exit\u id)`改为'args=(user\u id,play\u entry\u id,play\u exit\u id,0,0)`会发生什么呢。我正在努力。