【问题标题】:SQL query - "TypeError: sequence item 0: expected string, Decimal found" using the valueSQL 查询 - “TypeError: sequence item 0: expected string, Decimal found” 使用值
【发布时间】:2018-12-25 04:36:48
【问题描述】:

我已成功连接到我的数据库;我正在尝试运行 sql 查询并将表的第一个值放入我的结果中,以便在我的测试步骤中进一步使用它。现在,我收到“TypeError: sequence item 0: expected string, Decimal found”错误。请就如何从数据库表中获取单个值并将其放在屏幕字段中以继续执行测试用例提出有价值的想法。

请注意,我的sql查询结果中都是整数类型的值,但我还是不知道为什么系统说找到十进制。

下面是我的代码:

Connect to Database   pymssql  DBNAME  UNAME  PWD  PORTNO 
${QueryResult}= Query SelectQuery                             
Log  ${QueryResult[0]}              
Inputtext  id  ${QueryResult[0]}

我的 log 关键字的输出是 (Decimal('2'),),它应该是一个表值 2。

在此之后,系统尝试在字段中输入(Decimal('2'),),并抛出上述错误。

【问题讨论】:

  • 请显示您尝试使用的代码,以及确切的错误消息。
  • 连接到数据库 pymssql DBNAME UNAME PWD PORTNO
    ${QueryResult}= Query SelectQuery
    Log ${QueryResult[0]}
    Inputtext id ${QueryResult[0 ]}
  • 以正确的格式将其添加到问题的正文中。它在哪里失败 - 如果在Input textLog 关键字的输出是什么?
  • 对不起@Todor 我是这里的新手。现在我在问题正文中以正确的格式发布了一些修改。请检查。

标签: sql-server database python-2.7 robotframework


【解决方案1】:

您遇到了两个问题;第一个是 - 来自 sql 查询的结果集是元组列表,例如二维结构。
每个列表成员(一个元组)是响应的一行;每个元组成员都是该行中的一列。运行Log时可以看到:

Log  ${QueryResult[0]}
# the output is
#  (Decimal('2'),)
# e.g. "a single row, that has only one column" - just one tuple member

,即整行。所以要得到实际值,如果它在第一列,你必须指定它:

${value}=    Set Variable    ${QueryResult[0][0]}
# if you run Log on it, the output most probably looks like this:
#   Decimal('2')

所以现在你有了值,但你在第二个问题 - 它的数据类型是复杂的 Decimal 类型。一般来说,这不应该是一个问题 - RF(实际上是 python)应该能够自动转换它,但如果错误仍然存​​在/或者更加确定,您可以在使用它之前将其转换为字符串 Input Text

${value}=    Convert To String    ${value}    # now it's no longer Decimal, but plain str type
Input Text   id    ${value}

顺便说一句,不相关 - 我认为Input Text 关键字的定位符“id”不正确,只是复制了您在示例中使用的内容。

【讨论】:

  • 嗨@Todor,非常感谢您指出我所犯的错误。现在它对我来说非常有用。
【解决方案2】:

如果您使用 DatabaseLibrary,则 Query 关键字的结果是元组 1 的元组。要访问第一行中的第一个值,您可以执行以下操作:

${result}    Query    ${query_string}
${first}    Set Variable    ${result[0][0]}

编辑:您得到Decimal('2'),因为数据库中的列具有十进制数据类型。在您的查询中,您可以使用CAST(<column_name> as FLOAT) 将其转换为浮点数,但请注意,您可能会丢失精度。

【讨论】:

  • 感谢 JaPyR 的回复。但我仍然遇到同样的错误。
猜你喜欢
  • 2019-07-18
  • 2021-01-22
  • 1970-01-01
  • 2022-12-28
  • 1970-01-01
  • 1970-01-01
  • 2017-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多