我目前正在使用RethinkDB,它有一个很好的Web UI和一个Data Explorer,允许用户打印出数据库的内容,如下所示:
请注意,每个键值对都从一个新行开始,键和值(大多数)具有不同的颜色。相比之下,如果我使用iPython打印出相同的内容,我会得到一个几乎难以辨认的结果:
如果我迭代光标并print
每个项目,这会稍微改善一下,如下所示:
但是,这需要更多打字,但仍然不如RethinkDB Web UI。是否可以安装一个iPython插件来改善打印输出的外观?
(我看了pprint,但这似乎只能控制文本的位置,而不是它的颜色。)
答案 0 :(得分:2)
您可以使用json.dumps()
:
import json
for row in r.db(....).run(conn):
print(json.dumps(row, indent=4))
虽然这不会按排序顺序显示键,但在示例中似乎是这样,但它可能足以满足您的需要。正如@coder所指出的,您json.dumps()
可以通过指定sort_keys=True
参数对键进行排序。
for row in r.db(....).run(conn):
print(json.dumps(row, indent=4, sort_keys=True))
也可以直接打印对象(尚未测试过):
print(json.dumps(r.db(....).run(conn), indent=4, sort_keys=True)
也可能会打印出周围的“列表”对象。
要处理不支持序列化为JSON的对象,可以使用自定义JSONEncoder
。以下是处理datetime.datetime
个对象的示例:
from datetime import datetime
class DateTimeAwareJSONEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
tz = obj.tzname()
return obj.ctime() + (' {}'.format(tz) if tz else '')
return super(DateTimeAwareJSONEncoder, self).default(obj)
for row in r.db(....).run(conn):
print(json.dumps(row, indent=4, sort_keys=True, cls=DateTimeAwareJSONEncoder))
您可以根据需要使用datetime.strftime()
格式化日期时间字符串。
答案 1 :(得分:0)
time_format="raw"
添加到RethinkDB的run()
命令,则 mhawke的答案有效。 (否则,您得到TypeError
,因为包含时区的RethinkDB对象不是JSON可序列化的。结果如下:
更容易辨认。一个小缺点是epoch_time
比原始时间格式更难解释。