【sql/python】以共同字段进行两表合并

需求背景:

数据库中有两张表,共同字段为id,想要合并为一个表,但两张表内容过大,如果使用sql语句执行会崩溃!!

目标要求:从数据库中导出为两个json文件,一个文件字段为id,value;另一个文件字段为id,note,以相同字段id进行合并,输出一个JSON包含三个字段id,value,note

bash 复制代码
# 将两个json文件以id进行合并,输出最终的目标结果
import json

with open('text_1.json', 'r',encoding='utf-8') as f:
    data1 = json.load(f)
with open('text_2.json', 'r',encoding='utf-8') as f:
    data2 = json.load(f)

# for d in data1 + data2:
#     print(d)

# #----------报错,因为部分 id在note表不存在
# # 使用id字段作为键来合并两个字典
# merged_data = {d['ID']: { 'id': d['ID'], 'value': d['VALUE'], 'note': d['NOTE'] } for d in data1 + data2}

# 合并两个字典
# 执行上述一行代码报错的话,再改为下面的代码
merged_data = {}
for item1 in data1:
    ID = item1['ID']
    merged_data[ID] = {
        'ID': ID,
        'VALUE': item1['VALUE'],
        'NOTE': None  # 默认没有note
    }
for item2 in data2:
    ID = item2['ID']
    if ID in merged_data:
        # 如果id已经在merged_data中,更新note字段
        merged_data[ID]['NOTE'] = item2['NOTE']
    else:
        # 如果id不在merged_data中,但存在于data2中,添加到merged_data
        merged_data[ID] = {
            'ID': ID,
            'VALUE': None,  # 默认没有value
            'NOTE': item2['NOTE']
        }

# 将合并后的字典转换回JSON格式
merged_json = json.dumps(merged_data, ensure_ascii=False,  indent=4)

# 将合并后的JSON输出到一个文件中
with open('merged_data.json', 'w', encoding='utf-8') as f:
    f.write(merged_json)

注意如果你的表内容不大,可以选择使用sql或者pandas中的merge进行关联合并,代码如下

  • sql中left join语句
bash 复制代码
SELECT a.ID, a.VALUE, n. NOTE
FROM {table_name_1} a
LEFT JOIN {table_name_2} n ON a.ID = n.ID 
WHERE a.id in (619,776,2547,12715069,13206239) 
  • python 中pd.merge
python 复制代码
##----运行成功
import pandas as pd
import cx_Oracle as cx
from sqlalchemy import create_engine
def visitOracle(sql):
    # 数据库连接信息
    dsn_tns = cx.makedsn(('YOUR_HOST', 'YOUR_PORT', service_name='YOUR_SERVICE_NAME')
    conn = f"oracle+cx_oracle://{YOUR_USERNAME}:{YOUR_PASSWORD}@{dsn_tns}"
    # 创建数据库引擎
    engine = create_engine(conn)
    # 使用pandas的read_sql_query方法执行查询并获取结果
    df = pd.read_sql_query(sql, con=engine)
    # 关闭数据库连接
    engine.dispose()
    return df

##诊疗记录
sql1 = "select id, {value_column} FROM {table_name} where rownum<=5""
df1 = visitOracle(sql1)
print(df1)
sql2 = "select id, {value_column} FROM {table_name} where rownum<=5""
df2 = visitOracle(sql1)
print(df2)
# ----------pd合并两张表的数据
# 根据ID将两张表的数据合并
merged_df = pd.merge(df1, df2,  on='id', how='outer', suffixes=('', '_s'))
print(merged_df)
相关推荐
lili00123 分钟前
2026 企业 AI 选型新范式:OpenRouter Fusion 证明多模型融合性价比远超单模型,企业该如何重构技术栈? - 微元算力(weytoken)
java·人工智能·python·重构·ai编程
Keano Reurink5 分钟前
搜索API与GSC数据对比:发现数据盲区
数据库·python·数据挖掘
大黄说说21 分钟前
深入理解 Go 协程 Goroutine:并发编程的核心精髓
java·数据库·python
cd9888040 分钟前
2026年,电销机器人哪家强?
python
搏博41 分钟前
多传感器融合基础之一图像空间(Image Space)全面解析
图像处理·python·图像空间·融合感知
2601_961875241 小时前
花生十三资源盘|电子版|全科
python·django·flask·virtualenv·scikit-learn·pygame·tornado
郝学胜-神的一滴1 小时前
完全二叉树与堆底层原理深度剖析 | 手写C++大顶堆实现
java·开发语言·数据结构·c++·python·算法
WangN21 小时前
【通识】宇树G1_29DOF速度跟踪训练—逐章学习手册
人工智能·python·学习·机器人·具身智能
装不满的克莱因瓶1 小时前
掌握语义分割经典模型 FCN——从像素分类到端到端分割的奠基之作
人工智能·python·深度学习·算法·机器学习·分类·数据挖掘
noravinsc1 小时前
关于PEP8
python