需要补的知识:
1.HTTP协议,url里,那些header、body里都是啥东西
报错信息:
"服务异常 'bytes' object has no attribute 'get'"
错误原因:
http传输中,GET方法传入的是byte格式的数据,没有.get方法
# 假设你有一个包含JSON数据的字节字符串
json_bytes = b'{"name": "John", "age": 30, "city": "New York"}'
使用json_byte.get("name"),就会报这个错误。
解决方法:
1.先将byte数据转换成字符串格式
json_str = json_bytes.decode('utf-8')
2.字符串格式依旧没有.get方法,还需要将其转换成json格式
json_data = json.loads(json_str)
这时候再运行,就正常了。
做项目时数据库字段保留问题:
做项目时,有一些数据库中的字段在某个场景不需要使用,这时候最好时把用到的拿出来,而不是把不需要的删去。因为如果以后需要向数据库中添加新字段,用后者的话,就会出现bug.
对字典的字段进行选择性保留:
[
{
"accountName": "测试2",
"accountNo": null,
"cardNumber": null,
"create_at": "2024-07-08 10:23:30",
"iDentityCode": null,
"id": 8,
"imageBase64": "data:imbE/wDT
"imageID": "12",
"isSync": 0,
"phoneNumber": null,
"user_id": 7
},
{
"accountName": "测试2",
"accountNo": null,
"cardNumber": null,
"create_at": "2024-07-08 10:23:28",
"iDentityCode": null,
"id": 7,
"imageBase64": "data:image/p
"imageID": "12",
"isSync": 0,
"phoneNumber": null,
"user_id": 9
}
]
错误示范:
# 定义要保留的字段列表
fields_to_keep = ["accountName", "user_id", "imageBase64"]
# 遍历列表并更新每个字典
for item in data:
# 使用字典推导式来保留只需要的字段
item.update({k: v for k, v in item.items() if k in fields_to_keep})
这样得到的新data,依旧和原来的一样,没有发生改变。
错误原因:
[!TIP]
因为在字典推导式中,虽然我们使用了推导式来筛选出需要的字段,但是并没有对原始字典进行修改。在Python中,字典推导式会创建一个新的字典,而不会直接在原始字典上操作。
因此,原来的代码虽然在推导式中保留了只需要的字段,但并没有影响原始字典,所以最终输出的结果仍然包含了所有字段。
正确做法:创建一个新的字典
filtered_data = []
fields_to_keep = ["create_at", "id", "imageID", "isSync", "user_id"]
for item in data:
filtered_item = {key: item[key] for key in fields_to_keep if key in item}
filtered_data.append(filtered_item)
print(filtered_data)
封装成一个函数:
def filter_fields(data, fields_to_keep):
filtered_data = []
for item in data:
filtered_item = {key: item[key] for key in fields_to_keep if key in item}
filtered_data.append(filtered_item)
return filtered_data
选择性地查询数据库中的数据
每次查询一条,消费记录consume_info表中有一个datetime字段,用来记录表中数据的创建时间,想查询最新的消费记录,即最后一笔记录,应该怎么做,查询倒数第二、第三、第四....又该怎么做
可以使用ORDER BY
将结果按照datetime
字段降序排列,并使用LIMIT
来限制只返回一条记录
SELECT * FROM consume_info ORDER BY datetime DESC LIMIT 1;
要查询倒数第二、第三、第四等记录,同样需要按照datetime
字段降序排列,但这次需要调整LIMIT
子句的参数来返回不同数量的记录。不过,由于LIMIT
是从0开始计数的,因此,要获取倒数第二条记录,你需要跳过最新的那条记录,即使用LIMIT 1 OFFSET 1
;类似地,要获取倒数第三条记录,则使用LIMIT 1 OFFSET 2
,依此类推。
#查询倒数第二条
SELECT * FROM consume_info ORDER BY datetime DESC LIMIT 1 OFFSET 1;
#查询倒数第三条
SELECT * FROM consume_info ORDER BY datetime DESC LIMIT 1 OFFSET 2;
#查询倒数第四条
SELECT * FROM consume_info ORDER BY datetime DESC LIMIT 1 OFFSET 3;
LIMIT m OFFSET n #跳过n条数据,往后查询m条数据
标签:20240709,item,选择性,LIMIT,key,查询数据库,filtered,data,字典
From: https://www.cnblogs.com/marverdol/p/18293377