0

私は、動的コンテンツを生成するために MySQL DB からのデータにアクセスする cgi スクリプト (python) からの応答を受け取る Android 用のアプリケーションを作成しています。ちゃんと返事が来ます。JSON配列でAndroidクライアントに応答できるように、Python辞書サーバー側を使用しようとしています。デバッグ中に、次のように辞書を使用しない場合:

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."

その場合、2013-06-06 23:03:47 などの望ましい形式で Android クライアントで応答を取得します。

一方、辞書を作成し、次のように列名などのキーの下に値を配置すると:

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__と、オブジェクトの (「コード表現」) が表示されます。一方、directly を使用すると、オブジェクト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

完全な精度を維持することを除いて、通常の float とまったく同じように使用できますDecimal。それに対して行う演算にほとんど違いはありません。

repr対に関してstr。一般的な考え方は、str理解しやすく表示しやすいというものですが、reprコード指向であり、多くの場合eval(repr(obj)) == obj、保持されます。

于 2013-06-08T09:01:21.597 に答える