我在解释器上测试了一些代码,我注意到了sqlite3.Row
类的一些意外行为。
我的理解是,print obj
始终会得到与print str(obj)
相同的结果,在解释器中输入obj
会得到与print repr(obj)
相同的结果,但这是不是sqlite3.Row
:
>>> print row # the row object prints like a tuple
(u'string',)
>>> print str(row) # why wouldn't this match the output from above?
<sqlite3.Row object at 0xa19a450>
>>> row # usually this would be the repr for an object
(u'string',)
>>> print repr(row) # but repr(row) is something different as well!
<sqlite3.Row object at 0xa19a450>
我认为sqlite3.Row
必须是tuple
的子类,但我仍然不明白可能导致此行为的幕后情况。谁能解释一下呢?
这是在Python 2.5.1上测试的,不确定其他Python版本的行为是否相同。
不确定这是否重要,但我的Connection
的{{3}}属性设置为sqlite3.Row
。
答案 0 :(得分:12)
PySqlite为print
提供了特殊的本机挂钩,但它没有实现__repr__
或__str__
。我会说这有点错失机会,但至少它解释了你所观察到的行为。
请参阅pysqlite来源:https://github.com/ghaering/pysqlite/blob/master/src/row.c#L241 和python文档:http://docs.python.org/c-api/typeobj.html#tp_print
答案 1 :(得分:0)
providesB2
如果你想要原始的元组字符串表示,是一种解决方法。
例如,如果您想要轻松记录行,则非常有用:
s = str(tuple(row))
可以使用,因为行是可迭代的。