我正在尝试访问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
?
答案 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)时才会有用。