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

如何列出CSV文件中不存在于SQL表Stations中的实体?

实现方案

以下提供两种常用的落地方法,你可以根据自己的场景选择:

方法1:数据库内直接查询(适合数据量较大的场景)

无需额外写脚本,直接通过数据库本身的能力完成比对:

  • 第一步先把CSV文件导入数据库生成临时表,命名为temp_station_names,仅保留和CSV站点列对应的name字段即可
  • 执行差集查询即可拿到结果,两种常用SQL写法可选:
    1. LEFT JOIN 写法:
    SELECT t.name
    FROM temp_station_names t
    LEFT JOIN Stations s ON t.name = s.Name
    WHERE s.ID IS NULL;
    
    1. NOT EXISTS 写法:
    SELECT name
    FROM temp_station_names t
    WHERE NOT EXISTS (
        SELECT 1 FROM Stations s WHERE s.Name = t.name
    );
    

不同数据库导入CSV的语法略有区别:

  • MySQL可以用LOAD DATA INFILE语句
  • PostgreSQL可以用COPY命令
  • SQL Server可以用BULK INSERT或者可视化导入向导

方法2:Python脚本处理(适合小数据量、无数据库高权限的场景)

不需要修改数据库内容,本地即可快速运行:

  • 先安装依赖:pip install pandas sqlalchemy pymysql(pymysql对应MySQL,其他数据库替换为对应驱动即可)
  • 参考代码如下:
import pandas as pd
from sqlalchemy import create_engine

# 读取CSV中的站点名,提前做空格清理避免匹配误差
csv_df = pd.read_csv("你的CSV文件路径.csv")
csv_names = set(csv_df["CSV里站点列的列名"].str.strip())

# 连接数据库读取Stations表的站点名
# 连接串按你实际使用的数据库类型、账号信息修改即可,示例为MySQL格式
engine = create_engine("mysql+pymysql://用户名:密码@数据库地址:端口/数据库名")
db_df = pd.read_sql("SELECT Name FROM Stations", engine)
db_names = set(db_df["Name"].str.strip())

# 计算差集输出结果
diff_names = csv_names - db_names
print("CSV中存在但数据库表不存在的站点:")
for name in diff_names:
    print(name)

注意:两种方案都建议提前对站点名字段做去空格、统一大小写处理,避免因为格式不一致导致匹配错误;如果需要保留CSV中的重复站点,把代码中的set换成list遍历比对即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:36:03