mysql 定义函数Python中的意外结果

wnvonmuf  于 2023-04-04  发布在  Mysql
关注(0)|答案(3)|浏览(96)

我定义了一个函数:

def findbasecoin(Ticker):
    mycursor.execute(f"SELECT `param_basecoin`.`Symbol` FROM `param_asset` INNER JOIN `param_pair` ON `param_asset`.`id_pair` = `param_pair`.`pair_id` INNER JOIN `param_basecoin` ON `param_pair`.`Coin2_id` = `param_basecoin`.`basecoin_id` WHERE `param_asset`.`Ticker` LIKE '{Ticker.lower()}';")
    for result in mycursor:
        result = result[0]

当我打印(result)时,我得到了预期的答案:基础货币
我从另一个地方调用这个函数:

message= json.loads(message)
print(str(datetime.datetime.now()) + ": ")
print(message)
if message['e'].lower()=='zzztrade' : 
    basecoin = findbasecoin(message['s'])
    print(basecoin)
    forex_calc_list = {'v_usd' : 'USD', 'v_eur' : 'EUR', 'v_gbp' : 'GBP'}
    for x in forex_calc_list:
        mycursor.execute(f"SELECT `Rate`  FROM `param_forex` WHERE `Coin` LIKE '{basecoin}' AND `Basecoin` LIKE '{forex_calc_list[x]}'")
        for result in mycursor:
            print(result[0])

当我打印(basecoin)时,结果是空的!为什么?

ulydmbyx

ulydmbyx1#

def findbasecoin函数没有返回值,这就是basecoin为None的原因。

vybvopom

vybvopom2#

尝试添加return语句

def findbasecoin(Ticker):
    mycursor.execute(f"SELECT `param_basecoin`.`Symbol` FROM `param_asset` INNER JOIN `param_pair` ON `param_asset`.`id_pair` = `param_pair`.`pair_id` INNER JOIN `param_basecoin` ON `param_pair`.`Coin2_id` = `param_basecoin`.`basecoin_id` WHERE `param_asset`.`Ticker` LIKE '{Ticker.lower()}';")
    for result in mycursor:
        result = result[0]
    return result

我不清楚为什么你要循环mycursor中的值,每次都修改结果。只返回最后一个结果令人满意吗?
如果没有,您可能需要修改上面的代码。

v1uwarro

v1uwarro3#

这是因为你的函数没有返回值。另外,你在循环时改变了循环变量,你的缩进是错误的,你的查询容易被SQL注入。对于最后一个问题,试着使用准备好的语句。

相关问题