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()