Python3 使用 SQLite3 数据库的操作笔记:批量插入

本文记录了使用Python3将多个文本文件内容批量导入SQLite3数据库的过程,包括前言、思路和编程步骤。在Win7系统和VS Code环境下,通过读取文本文件并转换格式,高效地将数据插入数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的

要把很多个文本文件的内容(固定格式),批量导入到数据库,方便以后查询。

前言

刚接触 Python,把自己的心得分享给大家

电脑系统:Win7 X64
代码编辑器:Visual Studio Code,扩展中安装 Python
Python版本:3.8.4,当中已经集成 SQLite3,不用另外安装

测试文本文件:a1.txt,a2.txt 格式如下:

a1.txt
A1001,zhangyi
A1002,zhanger
A1003,zhangsan

a2.txt
A2001,liliyi
A2002,lilier
A2003,lilisan

思路

  • 循环文件夹内所有文本文件
  • 文本文件内容转换为数据库需要的格式,且放到列表变量中
  • 把列表变量数据插入到数据库

编程

经多次测试发现,下面这种方式处理效率最高:

import sqlite3, glob, time

Dir0=input('请输入文件所在的文件夹(格式 c: 或 c:/abc):')
# 查找输入的文件夹下所有 .txt 文件,不包含子文件夹
Dir1=glob.glob(Dir0+r'/*.txt') 

Int0=len(Dir1)  # 总文件数
if Int0 == 0:
    print(Dir0,'目录下没有所需文件')

# 数据库连接
conn = sqlite3.connect('z:\\1.db')
# 创建一个表 p (判断表是否存在,不存在就创建一个)
conn
<think>好的,我需要处理用户关于Python数据库连接和操作的请求。用户已经提供了一些引用资料,不过看起来这些引用可能与用户的实际需求不太相关,比如快速排序的示例,但用户现在询问的是数据库操作。我需要先理解用户的具体需求。 用户想要Python连接和操作数据库的代码示例或教程。根据引用内容,用户提到了MySQL,所以可能需要重点放在MySQL上。不过也可能需要涵盖其他数据库,比如SQLite,但用户明确提到了MySQL的引用,所以优先考虑MySQL。 首先,我应该整理出连接MySQL的基本步骤:安装驱动、建立连接、创建游标、执行SQL、处理结果、关闭连接。同时,确保代码示例正确,并符合Python的最佳实践,比如使用上下文管理器(with语句)来自动处理资源的关闭。 接下来,用户可能需要增删改查的示例。需要包括创建表、插入数据、查询、更新和删除操作。此外,事务处理和错误处理也是重要的部分,应该在示例中体现出来,比如使用try-except块,以及commit和rollback。 需要检查引用中的内容,引用1、2、3、4都提到了安装库,比如PyMySQL,以及连接数据库的基本步骤。所以代码示例中应该使用PyMySQL库,并且展示完整的流程。 另外,用户可能对参数化查询感兴趣,以防止SQL注入,这点需要强调。在插入数据的示例中使用占位符,而不是字符串拼接。 最后,生成相关问题,帮助用户深入理解,比如性能优化、连接池、ORM的使用等。 现在需要确保所有代码示例语法正确,特别是字符串格式和缩进。同时,按照用户的要求,行内公式用$...$,不过在这个问题中可能用不上数学公式,但如果有提到变量或术语,可能需要使用。不过当前问题主要是代码,所以可能不需要。 总结回答结构: 1. 安装PyMySQL 2. 建立连接的代码示例 3. 创建表的示例 4. 插入数据(包括参数化查询) 5. 查询数据 6. 更新和删除 7. 错误处理和事务 8. 关闭连接 每个部分都需要代码块,并且用中文解释步骤。同时,在引用部分,虽然用户提供的引用可能与实际内容不符,但需要适当引用,比如在安装库的部分引用[^1][^2][^4],在连接部分引用[^3][^4]等。 需要确保回答结构清晰,分步骤说明,代码正确,并且相关问题有意义,能够引导用户进一步学习。</think>### Python数据库连接与操作代码示例 #### 1. 安装数据库驱动 使用Python连接MySQL需安装`PyMySQL`库(Python 3.x推荐): ```bash pip install pymysql ``` [^2][^4] #### 2. 建立数据库连接 ```python import pymysql # 连接配置 config = { "host": "localhost", "user": "root", "password": "your_password", "database": "test_db", "charset": "utf8mb4" } # 建立连接 try: connection = pymysql.connect(**config) print("数据库连接成功") except pymysql.Error as e: print(f"连接失败: {e}") ``` [^3] #### 3. 创建数据表 ```python with connection.cursor() as cursor: create_table_sql = """ CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE ) """ cursor.execute(create_table_sql) connection.commit() # 提交事务 ``` #### 4. 插入数据(参数化查询) ```python try: with connection.cursor() as cursor: insert_sql = "INSERT INTO users (name, email) VALUES (%s, %s)" cursor.execute(insert_sql, ("张三", "zhangsan@example.com")) cursor.executemany(insert_sql, [("李四", "lisi@example.com"), ("王五", "wangwu@example.com")]) connection.commit() # 批量插入后提交 except pymysql.IntegrityError as e: print(f"数据冲突: {e}") connection.rollback() # 回滚事务 ``` [^3] #### 5. 查询数据 ```python with connection.cursor() as cursor: select_sql = "SELECT * FROM users WHERE name LIKE %s" cursor.execute(select_sql, ("%张%",)) results = cursor.fetchall() for row in results: print(f"ID: {row[0]}, 姓名: {row[1]}, 邮箱: {row[2]}") ``` #### 6. 更新与删除 ```python # 更新数据 with connection.cursor() as cursor: update_sql = "UPDATE users SET email = %s WHERE id = %s" cursor.execute(update_sql, ("new_email@example.com", 1)) connection.commit() # 删除数据 with connection.cursor() as cursor: delete_sql = "DELETE FROM users WHERE id = %s" cursor.execute(delete_sql, (3,)) connection.commit() ``` #### 7. 关闭连接 ```python connection.close() # 显式关闭连接 ``` #### 完整流程整合 ```python import pymysql def db_operations(): config = { "host": "localhost", "user": "root", "password": "your_password", "database": "test_db", "charset": "utf8mb4" } try: connection = pymysql.connect(**config) with connection: # 创建表 with connection.cursor() as cursor: cursor.execute("""CREATE TABLE IF NOT EXISTS products ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), price DECIMAL(10,2))""") connection.commit() # 插入数据 with connection.cursor() as cursor: cursor.executemany("INSERT INTO products (name, price) VALUES (%s, %s)", [("笔记本电脑", 5999.99), ("智能手机", 2999.50)]) connection.commit() # 查询数据 with connection.cursor() as cursor: cursor.execute("SELECT * FROM products WHERE price > %s", (3000,)) for row in cursor.fetchall(): print(f"商品: {row[1]}, 价格: {row[2]}") except pymysql.Error as e: print(f"数据库操作异常: {e}") if __name__ == "__main__": db_operations() ``` ### 关键注意事项 1. **参数化查询**:始终使用`%s`占位符避免SQL注入[^3] 2. **事务管理**:通过`commit()`和`rollback()`保证数据一致性 3. **连接关闭**:使用`with`语句或显式关闭连接释放资源 4. **字符编码**:建议使用`utf8mb4`支持所有Unicode字符[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值