山茶花开时。 2023-08-31 10:34 采纳率: 55.6%
浏览 9

如何解决sql语句插入一列数值出现空值情况(相关搜索:数据处理)

我这样一张Mysql数据表

img

先前使用Flask写了一个数据处理配置接口,第一次调用该接口传递指定参数,对指定列进行处理返回如下结果

img

但再次调用该接口处理其他列的时候,返回如下结果

img

如何返回如下结果?

img

该接口核心代码大致如下

             # 获取数据值
            datas = res[0]   # ['FOL', 'FOL', 'FOL', 'FOL', 'FOL', 'FOL', 'FOL', 'FOL']
            # 获取字段名
            col = res[1]  # Site
            # 查询output_table数据表中存在的字段名
            new_field = view_datasheet_field('output_table')
            print(new_field)
            if col in new_field:
                # 执行插入sql语句
                sql = f"INSERT INTO output_table ({col}) VALUES (%s)"
                # sql = f"UPDATE output_table SET {col}=(%s);"
                # 插入数据
                for data in datas:
                    cursor.execute(sql, (data,))
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-31 12:46
    关注

    【以下回答由 GPT 生成】

    该问题的根本原因是在第一次调用接口时,已经插入了指定列的数值,再次调用接口时没有对已存在的列进行处理。

    解决这个问题的方法是,在执行插入前,先检查数据表中是否已存在该列。如果不存在,再执行插入操作;如果存在,可以选择更新已存在的列的值或者直接跳过。

    具体的解决方案如下:

    1. 在执行插入前,先查询数据表中已存在的字段名。
    def view_datasheet_field(table_name):
        # 获取数据表结构信息
        cursor.execute(f"DESCRIBE {table_name}")
        results = cursor.fetchall()
    
        # 提取字段名
        field_names = [r[0] for r in results]
    
        return field_names
    
    1. 在执行插入前,检查指定列是否已存在于数据表中。
    # 获取字段名
    col = res[1]  # Site
    # 查询output_table数据表中存在的字段名
    new_field = view_datasheet_field('output_table')
    
    # 检查指定列是否已存在
    if col not in new_field:
        # 执行插入sql语句
        sql = f"ALTER TABLE output_table ADD {col} VARCHAR(255)"
        cursor.execute(sql)
        connection.commit()
        print(f"Successfully added new column: {col}")
    
    1. 执行插入操作。
    # 执行插入sql语句
    sql = f"INSERT INTO output_table ({col}) VALUES (%s)"
    
    # 插入数据
    for data in datas:
        cursor.execute(sql, (data,))
    

    这样,无论是否已存在指定列,都可以正常执行插入操作。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 8月31日

悬赏问题

  • ¥30 seata使用出现报错,其他服务找不到seata
  • ¥15 怎么实现输入一个要删除的数后删除后显示剩余数再输入再删除显示剩余数(语言-c语言)
  • ¥35 引用csv数据文件(4列1800行),通过高斯-赛德尔法拟合曲线,在选取(每五十点取1点)数据,求该数据点的曲率中心。
  • ¥20 程序只发送0X01,串口助手显示不正确,配置看了没有问题115200-8-1-no,如何解决?
  • ¥15 Google speech command 数据集获取
  • ¥15 vue3+element-plus页面崩溃
  • ¥15 像这种代码要怎么跑起来?
  • ¥15 安卓C读取/dev/fastpipe屏幕像素数据
  • ¥15 pyqt5tools安装失败
  • ¥15 mmdetection