Python3存储Facebook公开数据至数据库遇乱码问题求助
解决Facebook数据存入数据库乱码的问题
嘿,我看你遇到了把Facebook公开数据存数据库时出现乱码的问题,咱们来一步步搞定它!
问题根源
你用urllib.request.urlopen(url).read()获取到的是字节对象(bytes),比如b'"John Doe"'这种格式。Python的pprint打印时会帮你处理成易读的样子,但直接把这个字节对象插入数据库,就会被存成b'...'这种你看到的“乱码”格式——本质上这不是乱码,是字节对象的原始表示,不是我们需要的字符串内容。
修复步骤
1. 把字节数据解码为字符串(推荐用JSON解析)
Facebook Graph API返回的是JSON格式的数据,我们可以直接用json模块解析成Python字典,再提取需要的字段,这样拿到的就是纯字符串了:
import json import urllib.parse import urllib.request # 一次请求获取用户id和name params = urllib.parse.urlencode({ "fields": 'id,name', "access_token": ACCESS_TOKEN }) url = "{host}{path}?{params}".format(host=host, path=path, params=params) response = urllib.request.urlopen(url).read() # 解析JSON数据为字典 user_data = json.loads(response) uId = user_data['id'] uName = user_data['name']
2. 简化请求逻辑(可选但推荐)
你原来分三次请求获取不同字段,其实可以一次请求拿到所有需要的字段,既减少API调用次数,也避免重复代码。
3. 确认数据库字段类型
确保你的数据库表中NAME和STRING字段是字符串类型(比如MySQL的VARCHAR/TEXT,PostgreSQL的TEXT),不要用二进制类型(比如BLOB),这样字符串才能正确存储。
4. 数据库连接指定UTF-8编码(可选)
如果你的数据包含非英文字符(比如中文、emoji),建议在数据库连接时指定UTF-8编码,比如MySQL连接时加上charset=utf8mb4,确保特殊字符能正确存储。
修改后的完整代码片段
host = "https://graph.facebook.com/v3.0" path = "/me" import json import urllib.parse import urllib.request # 一次请求获取id和name params = urllib.parse.urlencode({ "fields": 'id,name', "access_token": ACCESS_TOKEN }) url = "{host}{path}?{params}".format(host=host, path=path, params=params) response = urllib.request.urlopen(url).read() user_data = json.loads(response) uId = user_data['id'] uName = user_data['name'] # 插入数据库(假设temp_id, age, address, salary变量已定义) cur.execute(""" INSERT INTO COMPANY(ID, NAME, AGE, ADDRESS, SALARY, STRING) VALUES(%s, %s, %s, %s, %s, %s) """, (temp_id, uName, age, address, salary, uId)) conn.commit() conn.close()
这样处理后,存入数据库的就是正常的字符串,不会再出现b'...'的格式啦!
内容的提问来源于stack exchange,提问作者Karos papermoon
相关产品推荐
相关产品推荐

