Python SQLite3 迭代器

本文介绍了一个Python脚本,该脚本遍历指定文件夹,将文件名与数据库中的记录进行匹配,并将匹配的文件名更新到数据库对应位置。使用了os模块遍历文件夹,sqlite3模块操作数据库。

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

需求:
遍历一个指定文件夹,将指定文件夹下的文件名称写入到数据库对应的列中,如果数据库行中的数据与文件的名字相同,则将对应的文件名写入匹配行的相对应的列中

数据库如下图:
image

import os
import sqlite3

conn=sqlite3.connect('经典赏析.db3')
print('数据库连接成功')
cursor=conn.cursor()
index=0
poetnames=cursor.execute("SELECT PoetName FROM Directory")
#获取文件的名称
def file_name(file_dir):
    l=[]
    for root,dirs,files in os.walk(file_dir):
        for file in files:           
            l.append(str(file).split('.',1)[0])               
    return l
#插入数据到数据库中
def update_to_database(content,limit):
    cursor.execute("UPDATE Directory SET ImgURL="+"'"+str(content)+"'"+"WHERE PoetName="+"'"+str(limit)+"'")

filenames=file_name("E:\93首诗")
#连接数据库,并查询数据库中的文件
poetnames_list=[]
for l in poetnames:
    poetnames_list.append(l[0])
print(poetnames_list)   
for x in poetnames_list:
    for y in filenames:      
        if str(x)==str(y):
            update_to_database(str(str(x)+".jpg"),str(x))
conn.commit()
conn.close()

注意通过cursor.execute()所获得的对象是一个可迭代对象*,如果把这个可迭代对象用在for的嵌套循环中的话,会出错,达不到预期结果*(此处我踩了10多分钟坑,最后调试才发现问题),必须先创建一个集合,对cursor.execute()返回的对象进行迭代,并把数据添加到集合中。

欢迎关注公众号:

码码小虫

### 使用Pythonsqlite3模块执行SQL语句 为了使用Python中的`sqlite3`模块来执行SQL语句,可以按照如下方式操作: 建立连接并创建游标对象之后,可以通过调用游标的execute方法传递SQL命令字符串给SQLite引擎。对于简单的查询,可以直接提供完整的SQL语句作为参数。 ```python import sqlite3 connection = sqlite3.connect('example.db') # 建立到数据库的连接 cursor = connection.cursor() # 创建游标对象用于发送指令 # 执行一条创建表的SQL语句 cursor.execute('''CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, username TEXT NOT NULL, password TEXT NOT NULL);''') # 插入单条记录的例子 cursor.execute("INSERT INTO users (username, password) VALUES ('admin', 'secret')") ``` 当涉及到带有变量的数据时,应该采用问号占位符的方式传参以防止SQL注入攻击[^1]。 ```python data_to_insert = ("john_doe", "very_secure_password") cursor.execute("INSERT INTO users (username, password) VALUES (?, ?)", data_to_insert) # 查询多行数据示例 result_set = cursor.execute("SELECT * FROM users").fetchall() for row in result_set: print(row) ``` 如果要处理更复杂的情况比如批量插入,则可利用executemany函数配合列表推导式或其他迭代器结构实现高效加载大量数据进入表格中[^4]。 最后,在完成所有的数据库交互动作以后记得提交事务以及关闭资源释放链接。 ```python connection.commit() # 提交当前事务 connection.close() # 关闭与数据库之间的连接 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值