You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQLite中用非空行更新含NULL值的行?支持Pandas方案

解决方案

SQLite 实现方式

SQLite本身没有原生支持批量列更新的语法,但可以通过动态生成SQL语句避免手动编写300列的更新逻辑,步骤如下:

  1. 查询表的所有列名,过滤掉Key1、key2这两个主键列:
SELECT name FROM pragma_table_info('你的表名') WHERE name NOT IN ('Key1', 'key2');
  1. 用返回的列名拼接出完整的UPDATE语句,每个列通过COALESCE(目标列, 参考列)替换NULL值。最终生成的SQL示例(假设表名为target_table):
UPDATE target_table
SET 
  val1 = COALESCE(val1, (SELECT val1 FROM target_table WHERE Key1='a' AND key2='a')),
  val2 = COALESCE(val2, (SELECT val2 FROM target_table WHERE Key1='a' AND key2='a')),
  -- 自动生成所有val列的对应语句
WHERE Key1 != 'a' OR key2 != 'a'; -- 跳过参考行本身

你可以用Python、Shell等脚本执行第一步查询,拿到列名后自动拼接完整SQL,再执行更新操作。

Python Pandas 实现方式

用Pandas处理会更直观,无需手动拼接SQL:

  1. 读取数据库表到DataFrame:
import pandas as pd
import sqlite3

conn = sqlite3.connect('你的数据库文件路径.db')
df = pd.read_sql_query("SELECT * FROM target_table", conn)
  1. 定位参考行并提取填充模板:
ref_row = df[(df['Key1'] == 'a') & (df['key2'] == 'a')].iloc[0]
  1. 用参考行的值填充其他行的NULL值:
# 仅对非参考行执行填充
mask = ~((df['Key1'] == 'a') & (df['key2'] == 'a'))
df.loc[mask, :] = df.loc[mask, :].fillna(ref_row)
  1. 将更新后的数据写回数据库(若表存在约束,需根据实际情况调整if_exists参数):
df.to_sql('target_table', conn, if_exists='replace', index=False)
conn.close()

内容的提问来源于stack exchange,提问作者user1911091

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 09:30:00