Python中的Unicode错误

4
以下是问题的要点。我正在尝试从REST API调用中获取数据并将其存储在数据库中。然后,我运行几个查询以查找前三个用户。我无法将我从MySQL获取的所有列表值打包到JSON文件中。
我无法解决以下问题。
``` File "/Users/id1/Downloads/user1.py", line 58, in get_last_three_installed_user results.append(dict(zip(columns, row))) TypeError: 'unicode' object is not callable ```
这是SQL查询的输出。
+----------------+--------+-------------+------------+-----------------+
| name           | gender | nationality | registered | registered_date |
+----------------+--------+-------------+------------+-----------------+
| mélissa robin  | female | FR          | 1437761753 | 2015-07-24      |
| agathe fabre   | female | FR          | 1437002837 | 2015-07-15      |
| soline morin   | female | FR          | 1436138376 | 2015-07-05      |
+----------------+--------+-------------+------------+-----------------+

如果我尝试使用str(name),会出现以下错误:

name = str(json_dict["results"][result]["user"]["name"]["first"]) +" "+ str(json_dict["results"][result]["user"]["name"]["last"])

UnicodeEncodeError: 'ascii'编解码器不能将字符u'\xe4'编码到位置1:不在128范围内

这是我的代码:

def get_last_three_installed_user(file_type):
    count_sql = "select name,gender,nationality,registered,DATE_FORMAT(from_unixtime(registered), '%Y-%m-%d') registered_date from install_user order by from_unixtime(registered) desc limit 3 "
    curs.execute(count_sql)
    columns = [column[0] for column in curs.description]
    results = []

    if file_type == 'csv':
        fp = open('user_list.csv', 'w')
        csvFile = csv.writer(fp)
        rows = curs.fetchall()
        csvFile.writerows(rows)
    else:
        with open('file_count.json', 'w') as outfile:
            for row in curs.fetchall():
               results.append(dict(zip(columns, row)))
               print results
            output = {"TableData": results}
            json.dump(output, outfile, sort_keys = True, indent = 4, ensure_ascii=False)

请提供一个最小、完整、可验证的示例 - m.wasowski
第一个错误信息对我来说没有意义,因为我没有看到任何尝试的“调用”。不过第二个错误信息是有道理的——您将无法将非ASCII字符包含的内容转换为str()。是什么让您尝试添加str呼叫? - ryachza
m.wasowski - 希望这段代码对您来说没问题。 - paddu
2
您似乎已经将某些内容分配给了zipdict以外的内置对象。对于具有ASCII范围之外内容的unicode对象调用str()将始终失败;请改用显式编码。 - Martijn Pieters
没关系,我已经想通了。 - paddu
1个回答

0

这段代码基本上已经解决了它。

def get_last_three_installed_user(file_type):
    count_sql = "select name,gender,nationality,registered,DATE_FORMAT(from_unixtime(registered), '%Y-%m-%d') registered_date from install_user order by from_unixtime(registered) desc limit 1,3 "
    curs.execute(count_sql)
    results = []
    dict1 ={}

    if file_type == 'csv':
        fp = open('user_list.csv', 'w')
        csvFile = csv.writer(fp)
        rows = curs.fetchall()
        csvFile.writerows(rows)
    else:
        with open('file_count.json', 'w') as outfile:
            for row in curs.fetchall():
                for idx, col in enumerate(curs.description):
                    dict1[col[0]] = row[idx]
                results.append(dict1)
            output = {"TableData": results}
            json.dump(output, outfile, sort_keys = True, indent = 4, ensure_ascii=False)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接