【python实现】插入mysql数据库之前查询该数据是否已存在

DUAL表

DUAL表是建立数据库的时候随数据字典创建而建立的,它是单行单列的一个表,一般称为“哑表、虚表等”。

它允许你在没有实际表的情况下执行 SELECT 语句。我们在这里使用它是因为我们不需要从任何实际的表中选取数据,我们只是想基于一个条件(即 某个字段是否已存在)来执行插入操作
但是注意:只能用于支持 DUAL 的数据库(如Oracle和MySQL)。

sql语句模板

场景:我想要往table_name表中插入一些数据,这些数据有name属性与errpr_text属性,仅当name在已有table_name表中不存在时插入新数据。

# SQL 插入语句模板
 insert_template = """  
  INSERT INTO {table_name} (name, error_text)  
  SELECT %s, %s  
  FROM DUAL  
  WHERE NOT EXISTS (SELECT 1 FROM {table_name} WHERE name = %s);  
  """

使用示例

我想插入的信息包括:文件路径so_location、错误信息描述error_text,仅当现有表内不存在so_location这条记录时插入table_name这个表中。

# 记录下错误的文件路径 已去掉重复文件路径
def saveToSQL_err(so_location,error_text,table_name,cursor,db):
    # SQL 插入语句模板
    insert_template = """  
    INSERT INTO {table_name} (so_location, error_text)  
    SELECT %s, %s  
    FROM DUAL  
    WHERE NOT EXISTS (SELECT 1 FROM {table_name} WHERE so_location = %s);  
    """
    try:
        sql_statement = insert_template.format(table_name=table_name)
        print(f"sql_statement为{sql_statement}")
        # 写入 SQL 语句到文件 后面的三元组传入三个%s中
        cursor.execute(sql_statement,(so_location, error_text, so_location))
        db.commit()     #提交数据库执行
        print("写入sql_err完成")
    except:
        # 发生错误时回滚
        db.rollback()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值