3

我使用 python 和 mySql,运行下面的查询:

sSql = "select id from table_name"
cursor.execute( sSql )
lrec = self.cursor.fetchall()
json.dumps( lrec )

并收到一条错误消息,因为我得到了 long int notation'id' : 1L而不是'id' : 1

我发现解决这个问题的唯一方法是丑陋的:

sSql = "select cast(id as char(10)) as id from table_name"

有什么更好的方法吗?

谢谢,于尔根

4

2 回答 2

1

您可以遍历 lrec 并将所有id's 转换为int. 我不知道您的 lrec 是如何格式化的(即元组列表)。

no_longs = [int(my_id) for my_id in lrec]
于 2013-07-03T15:06:18.800 回答
0

感谢 johnthexiii 的提示,我决定在 json.dumping 之前简单地修改结果。但是,我将所有内容都转换为字符串,因为 JSON 的使用者知道如何处理某些变量并且只能使用字符串。通过这样做,我也避免了返回的日期字段的问题,例如datetime.datetime(2013, 7, 2, 9, 18, 38)

ltpv = [ tpv for tpv in self.cursor ]
lk = [ ltpk[ 0 ] for ltpk in self.cursor.description ]
laResults = []
for tpv in ltpv:
    aResult = {}
    for k, v in zip( lk, tpv ):
        aResult[ k ] = unicode( v )
    laResults.append( aResult )
json.dumps( laResults )

感谢大家的投入

于 2013-07-04T03:51:11.257 回答