python(django)数据库返回结果(u'string')

时间:2012-03-01 01:02:12

标签: python database django

我正在尝试访问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 个答案:

答案 0 :(得分:3)

您的返回值是单个项目序列(元组),而不是字符串。这是Python DB-API的标准:

  

.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会引发异常。

答案 1 :(得分:0)

u'表示retVal实际上是unicode。 (尝试打印type(retVal))为了回答您的问题,您可以通过调用retVal = str(retVal)将其转换为“常规”字符串

答案 2 :(得分:0)

如果文本是用于呈现给用户,则应该对其执行任何操作。将它转换为字符串(使用str())只有在将它传递给需要字符串的东西(如subprocess.Popen)时才会有用。