当前位置:首页>python>Python数据库教程:sqlites避免重复插入数据,的2种方法(单列+多列字段约束)

Python数据库教程:sqlites避免重复插入数据,的2种方法(单列+多列字段约束)

  • 2026-09-10 22:07:48
Python数据库教程:sqlites避免重复插入数据,的2种方法(单列+多列字段约束)

Python,速成心法

敲代码,查资料,问Ai

练习,探索,总结,优化

★★★★★博文创作不易,使用代码的过程中,如有疑问的地方,欢迎大家指正留言交流。喜欢的老铁可以多多点赞+收藏分享+置顶,小红牛在此表示感谢。★★★★★

------★数据库历史教程列表★-------

Python数据库教程: SQLite3增删改查操作(tkinter)

Python项目源码57:数据格式转换工具1.0(csv+json+excel+sqlite3)

Python项目源码69:Excel数据筛选器1.0(tkinter+sqlite3+pandas)

Python数据库教程02:sqlite3批量删除+某字段数据内容替换(tkinter)

Python数据库教程03:SQLites聚合函数综合用法示例

以下是一个完整的 Python 示例,演示如何向 SQLite 数据库中插入数据,并避免重复插入。示例中使用了 INSERT OR IGNORE 和 ON CONFLICT DO NOTHING 两种常用方法,并包含了建表、插入测试和查询验证的完整流程。

关键点说明

1.唯一约束:必须在表字段上定义 UNIQUE 或 PRIMARY KEY,这是判断重复的依据。单列唯一:email UNIQUE,多列唯一:UNIQUE(name, email)
2.INSERT OR IGNORE:如果插入的行违反唯一约束,则静默忽略该行,不报错,也不插入。适用于 SQLite 所有版本。
# -*- coding: utf-8 -*-# @Author : 小红牛# 微信公众号:wdPythonimport sqlite3# 创建内存数据库(可改为文件如 'example.db')conn = sqlite3.connect(':memory:')cursor = conn.cursor()# 建表,email 字段设为 UNIQUE 以自动去重cursor.execute('''    CREATE TABLE users (        id INTEGER PRIMARY KEY AUTOINCREMENT,        name TEXT NOT NULL,        email TEXT UNIQUE NOT NULL    )''')conn.commit()# 待插入数据(含重复 email)data = [    ('Alice', 'alice@example.com'),    ('Bob', 'bob@example.com'),    ('Alice1', 'alice@example.com'),   # email重复    ('Charlie', 'charlie@example.com'),    ('Bob1', 'bob@example.com'),       # email重复]# 使用 INSERT OR IGNORE 忽略重复行print("--- 使用 INSERT OR IGNORE ---")for name, email in data:    cursor.execute(        'INSERT OR IGNORE INTO users (name, email) VALUES (?, ?)',        (name, email)    )conn.commit()# 查看最终数据(应只有 Alice, Bob, Charlie)cursor.execute('SELECT * FROM users')rows = cursor.fetchall()print("插入后表中的数据:")for row in rows:    print(row)conn.close()
--- 使用 INSERT OR IGNORE ---插入后表中的数据:
(1, 'Alice', 'alice@example.com')
(2, 'Bob', 'bob@example.com')
(4, 'Charlie', 'charlie@example.com')
3.ON CONFLICT DO NOTHING:更标准的 SQL 语法,从 SQLite 3.24.0 开始支持。可以在语句中指定冲突目标(如 ON CONFLICT(email)),更灵活。
import sqlite3# 创建内存数据库(可改为文件如 'example.db')conn = sqlite3.connect(':memory:')cursor = conn.cursor()# 建表,email 字段设为 UNIQUE 以自动去重cursor.execute('''    CREATE TABLE users (        id INTEGER PRIMARY KEY AUTOINCREMENT,        name TEXT NOT NULL,        email TEXT UNIQUE NOT NULL    )''')conn.commit()# 待插入数据(含重复 email)data = [    ('Alice', 'alice@example.com'),    ('Bob', 'bob@example.com'),    ('Alice1', 'alice@example.com'),   # email重复    ('Charlie', 'charlie@example.com'),    ('Bob1', 'bob@example.com'),       # email重复]# 使用 ON CONFLICT DO NOTHING 忽略重复行print("--- 使用 ON CONFLICT DO NOTHING ---")for name, email in data:    cursor.execute(        'INSERT INTO users (name, email) VALUES (?, ?) ON CONFLICT(email) DO NOTHING',        (name, email)    )conn.commit()# 查看最终数据(应只有 Alice, Bob, Charlie)cursor.execute('SELECT * FROM users')rows = cursor.fetchall()print("插入后表中的数据:")for row in rows:    print(row)conn.close()
运行效果:无论用哪种方法,最终 users 表中只会保留 3 条不重复的记录(Alice, Bob, Charlie),重复的 email 行被自动忽略。

4.针对多列组合唯一约束(如 UNIQUE(name, email))

import sqlite3conn = sqlite3.connect(':memory:')cursor = conn.cursor()# 建表:定义 (name, email) 组合为唯一键cursor.execute('''    CREATE TABLE users (        id INTEGER PRIMARY KEY AUTOINCREMENT,        name TEXT NOT NULL,        email TEXT NOT NULL,        UNIQUE(name, email)   -- 复合唯一约束    )''')conn.commit()data = [    ('Alice', 'alice@example.com'),    ('Bob', 'bob@example.com'),    ('Alice', 'alice@example.com'),   # (name+email)重复    ('Charlie', 'charlie@example.com'),    ('Bob', 'bob@example.com'),       # 完全重复]print("--- 使用 ON CONFLICT DO NOTHING(复合唯一键) ---")for name, email in data:    cursor.execute(        'INSERT INTO users (name, email) VALUES (?, ?) ON CONFLICT(name, email) DO NOTHING',        (name, email)    )conn.commit()cursor.execute('SELECT * FROM users')rows = cursor.fetchall()print("插入后表中的数据:")for row in rows:    print(row)   # 仅保留三条conn.close()

输出:

插入后表中的数据:(1, 'Alice', 'alice@example.com')(2, 'Bob', 'bob@example.com')(4, 'Charlie', 'charlie@example.com')

完毕!!感谢您的收看

------★★历史博文集合★★------

Python入门篇  进阶篇  视频教程  Py安装

py项目Python模块 Python爬虫  Json

Xpath正则表达式SeleniumEtreeCss

Gui程序开发TkinterPyqt5 列表元组字典

数据可视化 matplotlib 词云图Pyecharts

海龟画图PandasBug处理电脑小知识

自动化脚本编程工具NumPy CSVWeb

Pygame  图像处理  机器学习数据库

最新文章

随机文章