Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

DatabaseLibrary как получить одно значение из выборки


(kom) #1

когда выполняю Query:
${queryResults} Query select first_name from person

то получаю как я понимаю список значений в таком формате:
${queryResult} = [(‘Simpson’,)]

и потом нужно выполнять какие-то дополнительные действия типа split string несколько раз, чтоб в итоге получить само значение:
${queryResult} = Simpson
Как можно сразу получить такой результат без лишних действий? Может есть другая библиотека?


(Dmitriy Zverev) #2

${queryResults[0]}


(Mykhailo Poliarush) #3

Вот всегда рекомендую людям, которые работают с Robot Framework. Сначала надо немного подучить python, тогда намного проще разбираться в деталях фреймворка.

На выходе ты получаешь список, внутри кортежи, т.е. тоже последовательность, которая достается по индексу.
Так что в данном случае тебе нужно просто вытащить значение по индексу из вложенных последовательностей.

${queryResults} Query select first_name from person
Log	${queryResults[0][0]}

(kom) #4

пробовал но так получается:
${servicename} set variable ${results}[0]
Получаю:
${servicename} = [(‘some service’,)][0]


(kom) #5

но кейворд log ничего не возвращает как я понимаю, нельзя с его результатом работать дальше.
Мне потом дальше нужно брать это значение и проверять его и т.д.


(Mykhailo Poliarush) #6

видишь разницу?

${results}[0]
${results[0]}

это просто пример, так что можешь вызывать set variable и пересохранять значению куда тебе нужно


(kom) #7

Спасибо, не заметил разницу.


(kom) #8

еще вопрос по databaselibrary:
неправильно работает row count:
${rowCount} Row Count select * from tablename

всегда возвращает 0, пробовал с разными таблицами.
Хотя таблицы точно не пустые.


(Mykhailo Poliarush) #9

ну потому что там есть дефект, нужно подправить библиотеку, вот исправленный код

    def row_count(self, selectStatement):
        """
        Uses the input `selectStatement` to query the database and returns
        the number of rows from the query.

        For example, given we have a table `person` with the following data:
        | id | first_name  | last_name |
        |  1 | Franz Allan | See       |
        |  2 | Jerry       | Schneider |

        When you do the following:
        | ${rowCount} | Row Count | select * from person |
        | Log | ${rowCount} |

        You will get the following:
        2

        Also, you can do something like this:
        | ${rowCount} | Row Count | select * from person where id = 2 |
        | Log | ${rowCount} |

        And get the following
        1
        """
        cur = None
        try:
            cur = self._dbconnection.cursor()
            self.__execute_sql(cur, selectStatement)
            cur.fetchall()
            rowCount = cur.rowcount
            return rowCount
        finally:
            if cur:
                self._dbconnection.rollback()
        return received

    def __execute_sql(self, cur, sqlStatement):
        logger.debug("Executing : %s" % sqlStatement)
        return cur.execute(sqlStatement)

(kom) #10

Спасибо!


(kom) #11

Еще один вопрос: если выборка возвращает значение с кириллицей, то оно отображается как я понимаю в unicode.

Т.е. нужно его как-то конвертировать с помощью convert to string.

Или есть другой способ, чтоб сразу получить кириллицу?


Возвращаемое значение с кириллицой в Databaselibrary RobotFramework
(Mykhailo Poliarush) #12

Для этого нужна уже отдельная тема. Справа от коммента есть “Ответить в новой теме”, создавай новую тему и я думаю @DmitriyZverev тебе сразу же ответит, я знаю у него точно есть решение :smile: