python - 如何在不退出字典的情况下处理 python 中的 KeyError 异常?

标签 python json dictionary

基本上,我有一些 JSON 数据,我想将其放入 MySQL 数据库中,为此,我尝试在cursor.execute 方法中获取字典的内容。我的代码如下:

for p in d['aircraft']:
with connection.cursor() as cursor:
print(p['hex'])
sql = "INSERT INTO `aircraft` (`hex`, `squawk`, `flight`, `lat`, `lon`, `nucp`, `seen_pos`, " \
                          "`altitude`, `vert_rate`, `track`, `speed`, `messages`, `seen`, `rssi`) " \
                          "VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s )"

cursor.execute(sql, (p['hex'], p['squawk'], p['flight'], p['lat'], p['lon'], p['nucp'], p['seen_pos'], p['altitude'], p['vert_rate'], p['track'], p['speed'], p['messages'], p['seen'], p['rssi']))
print('entered')
connection.commit()

问题是字典中的任何值随时都可能为空,我需要找出如何处理这个问题。我尝试将代码放入 try catch block 中,并在引发 KeyError 异常时“传递”,但这意味着当记录具有空值时,记录将被完全跳过。我还尝试编写大量 if block 来附加带有字典键值的字符串,但这几乎没有用。

我需要找到一种方法将字典放入我的数据库中,即使它包含空值。

最佳答案

您可以使用dict.get()方法,或者构造一个 defaultdict ,对于缺少的键返回 None:

import collections


keys = ['hex', 'squawk', 'flight', 'lat', 'lon', 'nucp', 'seen_pos', 
        'altitude', 'vert_rate', 'track', 'speed', 'messages', 'seen',
        'rssi']

for p in d['aircraft']:
    with connection.cursor() as cursor:
        sql = "INSERT INTO `aircraft` (`hex`, `squawk`, `flight`, `lat`, `lon`, `nucp`, `seen_pos`, " \
                          "`altitude`, `vert_rate`, `track`, `speed`, `messages`, `seen`, `rssi`) " \
                          "VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s )"

        # Could also use a defaultdict
        cursor.execute(sql, tuple(p.get(key) for key in keys))
        print('entered')
    connection.commit()

有关使用 dict.get() 的更多示例,请参阅此答案:https://stackoverflow.com/a/11041421/1718575

这假设在提供 None 时 SQL 将执行正确的操作。如果您想使用字符串 'NULL',您可以将其作为 dict.get() 的第二个参数提供。

关于python - 如何在不退出字典的情况下处理 python 中的 KeyError 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58844602/

相关文章:

python - 如何利用重力使 Pymunk 对象聚集到中心点?

python - 使用列车测试分割的维度问题

python - 使用 Numpy,如何计算数字 1 到 10 的 25 个百分位数?

javascript - 从 MVC AJAX 调用获取 "Invalid JSON primitive"错误

ios - 如何在 Swift 中组合两个 Dictionary 实例?

python - 在多行中初始化 Python 中的复杂嵌套列表?

javascript - 在 ASP.NET MVC 中使用 jQuery 数据表时如何更新模型数据

python - 带有值的多索引数据框的字典列表列表

ios - 调用在类中初始化的字典数组

java - 如何将obj传递给jsp并循环创建多个div?