20240709(byte数据转换、字典数据选择性保留、选择性查询数据库)

需要补的知识:

​ 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条数据
posted @ 2024-07-10 10:20  marverdol  阅读(66)  评论(0)    收藏  举报