0

我一直在为 Android 编写一个应用程序,它接收来自 cgi 脚本(python)的响应,该脚本从 MySQL 数据库访问数据以生成动态内容。我收到回复很好。我正在尝试使用 python 字典服务器端,以便我可以使用 JSON 数组响应 android 客户端。在调试过程中,如果我不使用字典,像这样:

with con: 
    cur = con.cursor()
    cur.execute("SELECT * from posts")
    rows = cur.fetchall()

print "Content-type: text/html"
print
if cur:
    print row[1] #this entry in the DB is a datetime field, however other fields suffer from the same problem
else:
    print "Something went wrong."

在这种情况下,我会以理想的格式在 android 客户端上获得响应,例如 2013-06-06 23:03:47。

另一方面,如果我创建一个字典并将值放在一个键下,例如我的列名,如下所示:

with con: 
    cur = con.cursor()
    cur.execute("SELECT * from posts")
    rows = cur.fetchall()

print "Content-type: text/html"
print
if cur:
    for row in rows:
        d = {'time':row[1]}
        print d
else:
    print "Something went wrong."

然后我收到的回复有格式问题。我收到如下回复:

{'time':datetime.datetime(2013,6,6.23.3.47)}

我使用 Decimal 的数字也是如此。它们不像在普通打印中那样仅显示为数字,而是在字典(响应)中显示为:

Decimal('12.345678')

比我有更多知识的人可以对这个主题有所了解吗?

提前致谢!

4

1 回答 1

0

当您在字典(或任何容器)内打印时,它会显示__repr__对象的(“代码表示”);而当您print定向使用时,它会打印__str__对象的(人类可读的)表示。

import decimal
mynum = decimal.Decimal('12')
print mynum # 12
print [mynum] # [Decimal('12')

print repr您可以通过在代码中添加一行来看到这一点:

if cur:
    print repr(row[1]) # will be Decimal...
    print row[1] # looks like a number

你可以Decimal像使用普通浮点数一样使用,除了它保持完全的精度,它对你可能对它做的任何算术都没有什么影响。

repr相对而言str。一般的想法是str易于理解和查看,而repr面向代码并且通常eval(repr(obj)) == obj会成立。

于 2013-06-08T09:01:21.597 回答