

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 两种常用方法,并包含了建表、插入测试和查询验证的完整流程。
关键点说明
# -*- 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()
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()
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')
完毕!!感谢您的收看
------★★历史博文集合★★------
