база данных python (django) вернула результат (u'string ') - PullRequest
1 голос
/ 01 марта 2012

Я пытаюсь получить доступ к другой базе данных (другому приложению) в django и сделать запрос для получения некоторых данных в моем проекте django со следующими данными:

cursor = connections['another_db'].cursor()
cursor.execute("query here to fetch data")
retVal = cursor.fetchone()

retVal является текстовымвведите значение в базе данных amysql.После того, как он возвращается, я пытаюсь объединить его с другой строкой:

newString = "%s: %s" % (retVal, anotherString)
logging.debug("newString: %s" % newString)

Я получил следующий вывод:

DEBUG:root:newString value: (u'RetValString',): anotherStringValue

Есть ли способ удалить оболочку (u' .. '), такчто только RetValString: anotherStringValue показывает?

Ответы [ 3 ]

3 голосов
/ 01 марта 2012

Возвращаемое значение представляет собой последовательность элементов (кортеж), а не строку. Это стандарт от DB-API Python:

.fetchone ()

        Fetch the next row of a query result set, returning a
        single sequence, or None when no more data is
        available. [6]

        An Error (or subclass) exception is raised if the previous
        call to .execute*() did not produce any result set or no
        call was issued yet.

Таким образом, немедленное исправление будет:

newString = "%s: %s" % (retVal[0], anotherString)

Но всегда лучше проверять наличие возвращаемых значений:

cursor = connections['another_db'].cursor()
cursor.execute("query here to fetch data")
retVal = cursor.fetchone()
if retVal:
   newString = "%s: %s" % (retVal[0], anotherString)

В качестве бонуса вы должны обернуть его в блок try / catch, так как fetchone будет вызывать исключение, если возникнут проблемы.

0 голосов
/ 01 марта 2012

Если текст предназначен для представления пользователю, вы, вероятно, ничего не должны с ним делать.Преобразование его в строку (с использованием str ()) будет полезно только в том случае, если вы передаете его чему-то (например, subprocess.Popen), для которого требуется строка.

0 голосов
/ 01 марта 2012

u' указывает, что retVal на самом деле является юникодом.(Попробуйте напечатать type(retVal)). Чтобы ответить на ваш вопрос, вы можете преобразовать его в «обычную» строку, вызвав retVal = str(retVal)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...