for result in results: tracking_number = result[0] # 调用 query_logistics_trajectory 函数查询物流轨迹 logistics_trajectory = query_logistics_trajectory(tracking_number) # 将 list 转换为 JSON 字符串 if() logistics_trajectory_json = json.dumps(logistics_trajectory['result']['list']) # 更新表 logistics_trajectory 中的 logistics_trajectory 字段 sql = f"UPDATE logistics_trajectory SET logistics_trajectory='{logistics_trajectory_json}' WHERE tracking_number='{tracking_number}' AND state='1'" cursor.execute(sql) 以上代码logistics_trajectory_json = json.dumps(logistics_trajectory['result']['list']),会导致中文全部失效,什么回事
时间: 2024-03-24 22:38:11 浏览: 107
这是因为在将 Python 对象转换为 JSON 字符串时,如果字符串中包含中文字符,它们将被默认编码为 Unicode 字符,从而导致中文字符失效。为了解决这个问题,可以在调用 json.dumps() 函数时,加上 ensure_ascii=False 参数,这样就可以保留中文字符了。修改后的代码如下:
```
logistics_trajectory_json = json.dumps(logistics_trajectory['result']['list'], ensure_ascii=False)
```
相关问题
for result in results: tracking_number = result[0] # 调用 query_logistics_trajectory 函数查询物流轨迹 logistics_trajectory = query_logistics_trajectory(tracking_number) # 将 list 转换为 JSON 字符串 if() logistics_trajectory_json = json.dumps(logistics_trajectory['result']['list']) # 更新表 logistics_trajectory 中的 logistics_trajectory 字段 sql = f"UPDATE logistics_trajectory SET logistics_trajectory='{logistics_trajectory_json}' WHERE tracking_number='{tracking_number}' AND state='1'" cursor.execute(sql) 以下logistics_trajectory['result']['list']代码如何更改防止报错
要防止报错,需要加入判断语句,确保 logistics_trajectory['result']['list'] 存在且不为空。
可以使用以下代码进行更改:
```python
if 'result' in logistics_trajectory and 'list' in logistics_trajectory['result'] and logistics_trajectory['result']['list']:
logistics_trajectory_json = json.dumps(logistics_trajectory['result']['list'])
else:
logistics_trajectory_json = None
```
这样,如果 logistics_trajectory['result']['list'] 不存在或为空,logistics_trajectory_json 就会被赋值为 None,避免了对空值进行操作导致的报错。
如何用python代码优雅地实现以下功能,从mysql数据库中查询表logistics_trajectory中所有的字段tracking_number值,循环查出tracking_number,在循环内把每一个tracking_number作为函数query_logistics_trajectory的参数,并执行这个函数query_logistics_trajectory,函数query_logistics_trajectory返回的结果示例如下 { "status": "0",/* status 0:正常查询 201:快递单号错误 203:快递公司不存在 204:快递公司识别失败 205:没有信息 207:该单号被限制,错误单号 */ "msg": "ok", "result": { "number": "780098068058", "type": "zto", "list": [{ "time": "2018-03-09 11:59:26", "status": "【石家庄市】快件已在【长安三部】 签收,签收人: 本人,感谢使用中通快递,期待再次为您服务!" }], "deliverystatus": "3" } } 把示例里面的list转成JSON,并赋值给字段logistics_trajectory,然后根据tracking_number和state = '1'条件去更新表logistics_trajectory中的字段logistics_trajectory,这个表中有以下字段acc_key,issuance_date,issuance_number,tracking_number,logistics_company_name 以上涉及的mysql数据库的库为py,表名:logistics_trajectory 数据库的IP:192.168.0.126,账号:root 密码:quc@2022@din
下面是一个用 Python 连接 MySQL 数据库,并实现上述功能的代码示例:
```python
import json
import pymysql
# 连接 MySQL 数据库
conn = pymysql.connect(host='192.168.0.126',
user='root',
password='quc@2022@din',
database='py')
# 定义查询物流轨迹的函数
def query_logistics_trajectory(tracking_number):
# TODO: 调用快递查询 API 并返回结果
result = {'status': '0',
'msg': 'ok',
'result': {'number': tracking_number,
'type': 'zto',
'list': [{'time': '2018-03-09 11:59:26',
'status': '【石家庄市】快件已在【长安三部】 签收,签收人: 本人,感谢使用中通快递,期待再次为您服务!'}],
'deliverystatus': '3'}}
return result
# 查询表 logistics_trajectory 中的所有 tracking_number
with conn.cursor() as cursor:
sql = 'SELECT tracking_number FROM logistics_trajectory'
cursor.execute(sql)
results = cursor.fetchall()
# 遍历 tracking_number 并更新表 logistics_trajectory
with conn.cursor() as cursor:
for result in results:
tracking_number = result[0]
# 调用 query_logistics_trajectory 函数查询物流轨迹
logistics_trajectory = query_logistics_trajectory(tracking_number)
# 将 list 转换为 JSON 字符串
logistics_trajectory_json = json.dumps(logistics_trajectory['result']['list'])
# 更新表 logistics_trajectory 中的 logistics_trajectory 字段
sql = f"UPDATE logistics_trajectory SET logistics_trajectory='{logistics_trajectory_json}' WHERE tracking_number='{tracking_number}' AND state='1'"
cursor.execute(sql)
# 提交事务
conn.commit()
# 关闭数据库连接
conn.close()
```
需要注意的是,上述代码中的 `query_logistics_trajectory` 函数只是一个示例,需要根据具体的快递查询 API 进行实现。另外,由于涉及到更新数据库,建议在执行前先备份数据以防止误操作。
阅读全文