【问题标题】:how to get value from resultset as float? [duplicate]如何从结果集中获取值作为浮点数? [复制]
【发布时间】:2021-08-14 23:57:59
【问题描述】:
while True:
    time.sleep(3)
    mycursor.execute("SELECT buyprice FROM BTC_position")
    BTC_buyprice = mycursor.fetchall()
    print(type(BTC_buyprice))
    print(BTC_buyprice)

有结果


[('46318.0',)]

有什么方法可以将 BTC_buyprice 转换为 Float?

【问题讨论】:

    标签: python mysql


    【解决方案1】:

    我认为

    your_float = float(BTC_buyprice[0][0])
    

    应该可以。

    看起来 BTC_buyprice 返回一个元组列表。您可以像列表一样访问元组,但是当您对该查询有多个结果时,您需要知道如何访问它们的结构。

    【讨论】:

    • 天哪,太简单了,我在谷歌上搜索了一个小时,但无法解决,非常感谢
    【解决方案2】:

    fetchall 的结果始终是一个元组列表。如果您的查询总是只返回一行(或者您只关心第一行),最好使用fetchone - 这将返回一个元组。

    无论如何,如果您想提取元组的第一个元素,在 Python 中执行此操作的惯用方法是通过元组解包,如下所示:

    a = (1,)
    (b,) = a
    # Now b == 1
    

    解释:(b,) = a 赋值检查 a 是否为单元素元组,如果是,则将名称 b 分配给其第一个元素。

    如果你坚持使用 fetchall,下面的习语可以让你解压元组列表的第一个元素(如果你知道它是一个单元素元组,就像你的例子一样)

    a = [(1,)]
    # a can also have more elements, it doesn't matter
    (b,), *_ = a
    

    解释:赋值(b,), *_ = a遍历a,获取第一个元素并执行与上面相同的操作,然后获取所有其他元素并将它们放入一个名为_的新创建列表中@(@987654331 @ 是 Python 中一次性变量的标准名称;但是,您实际上可以在此处使用任何其他名称,而不是 b - 如果这样做,会发生一些奇怪的事情 - 如果需要,请尝试)。

    当然,毕竟,在您的情况下,您需要使用float()string 转换为float。因此,您的案例中的代码可能如下所示:

    mycursor.execute("SELECT buyprice FROM BTC_position")
    (BTC_buyprice,) = mycursor.fetchone()
    BTC_buyprice = float(BTC_buyprice)
    

    (我想不出一种优雅而惯用的方式来压缩最后两行。)

    如果您希望只获得一行,则您可能希望获得浮动列表。这可以通过使用列表推导(结合上述习语)来完成:

    mycursor.execute("SELECT buyprice FROM BTC_position")
    BTC_buyprice = [float(price) for (price,) in mycursor.fetchall()]
    

    【讨论】:

      【解决方案3】:

      试试这个float(BTC_buyprice[0][0])

      【讨论】:

      • 这不会向scoofy's older answer 添加任何内容。比较一下为什么“纯代码答案”没那么有用。
      猜你喜欢
      • 2016-12-16
      • 2021-07-20
      • 2018-07-16
      • 2016-07-13
      • 1970-01-01
      • 2012-12-10
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多