我真的爱发明 发表于 2022-12-28 22:24

Python读取sqlite3数据库中的数据





## 1. 简介

- 从Python3.x版本开始,在标准库中已经**内置**了SQLlite3模块,它可以支持SQLite3数据库的访问和相关的数据库操作。在需要操作SQLite3数据库数据时,只须在程序中导入SQLite3模块即可。



## 1.1. 使用

### 1.1.1. 创建

代码

```
#导入sqllite3模块
import sqlite3
# 1.硬盘上创建连接
con = sqlite3.connect('first.db')
# 获取cursor对象
cur = con.cursor()
# 执行sql创建表
sql = 'create table t_person(pno INTEGER PRIMARY KEYAUTOINCREMENT ,pname varchar(30) NOT NULL ,age INTEGER)'
try:
    cur.execute(sql)
except Exception as e:
    print(e)
    print('创建表失败')
finally:
    # 关闭游标
    cur.close()
    # 关闭连接
    con.close()
```

- ![](https://remnote-user-data.s3.amazonaws.com/SlKqZMuBJI6kQIyQ5akQWYcw3NPrSEYO41jA_TndcJy11xDrZOmwtwXm5f-IsAorpJMpEAA83OB2JEHJQLkGxryjIqbqoATAzCE64zO5jArSIrlOZ-vtVpHKU06s8_mp.png)

### 1.1.2. 插入

#### 1.1.2.1. 插入一条数据

```
#导入sqllite3模块
import sqlite3
# 1.硬盘上创建连接
con = sqlite3.connect('first.db')
# 获取cursor对象
cur = con.cursor()
# 执行sql创建表
sql = 'insert into t_person(pname,age) values(?,?)'
try:
    cur.execute(sql,('张三',23))
    #提交事务
    con.commit()
    print('插入成功')
except Exception as e:
    print(e)
    print('插入失败')
    con.rollback()
finally:
    # 关闭游标
    cur.close()
    # 关闭连接
    con.close()
```

### 1.1.3. 查询

#### 1.1.3.1. 查询所有数据

- fetchall()查询所有数据

```
#导入sqllite3模块
import sqlite3
# 1.硬盘上创建连接
con = sqlite3.connect('first.db')
# 获取cursor对象
cur = con.cursor()
# 执行sql创建表
sql = 'select * from t_person'
try:
    cur.execute(sql)
    # 获取所有数据
    person_all = cur.fetchall()
    # print(person_all)
    # 遍历
    for p in person_all:
      print(p)
except Exception as e:
    print(e)
    print('查询失败')
finally:
    # 关闭游标
    cur.close()
    # 关闭连接
    con.close()
```

-

- ![](https://remnote-user-data.s3.amazonaws.com/RE27JIxTV9jcgmddMEYO9O6psHDPQwC3nDA0lx9hKUwezNwkYFRRlYuZGu7XRwoi6H2hw_pkztBsjxU4Ua-38w1MGVkHmIRxmqtKdZZwi0e9oECJwKe0bPBE-tdCXSRo.png)

- #### 查询一条数据

- fetchone()查询一条数据

- 按顺序进行读取

```
#导入sqllite3模块
import sqlite3

# 1.硬盘上创建连接
con = sqlite3.connect('first.db')
# 获取cursor对象
cur = con.cursor()
# 执行sql创建表
sql = 'select * from t_person'
try:
    cur.execute(sql)
    # 获取一条数据
    person = cur.fetchone()
    print(person)

    person = cur.fetchone()
    print(person)

    person = cur.fetchone()
    print(person)

    person = cur.fetchone()
    print(person)

except Exception as e:
    print(e)
    print('查询失败')
finally:
    # 关闭游标
    cur.close()
    # 关闭连接
    con.close()
```

   -
   - ![](https://remnote-user-data.s3.amazonaws.com/khDHeXzEDjk1ChlyefLEZ7T-yC8Ffzpc_fcuHreKXdV1rt5GHJdICS5tcQciTbS7vhdx3g79NFcYp-t657vdp6bnK68PNhDP7Y7SJ_ipYTmqUCOCbv39uQ2y9Pjxs507.png)

#### 1.1.3.2. 读取特定位置的数据

   - 需要把读取的信息放到sql语句中
   获得最新一条数据
- 代码

```
def sqlite3_get_last_data(db_path,sql):
    # 导入sqllite3模块
    import sqlite3
    # 1.硬盘上创建连接
    con = sqlite3.connect(db_path)
    # 获取cursor对象
    cur = con.cursor()
    # 执行sql创建表

    try:
      cur.execute(sql)
      # 获取所有数据

      person_all = cur.fetchall()
      last_data = person_all[-1]
      # print(last_data)
      # print("type(last_data):", type(last_data))
      # print("last_data:", )
      last_text = last_data
      return last_text
    except Exception as e:
      print(e)
      print('查询失败')
    finally:
      # 关闭游标
      cur.close()
      # 关闭连接
      con.close()

db_path = 'D:\MailMasterData\hengzhe19711121@163.com_1414\search.db'
sql = 'select * from Search_content'
last_text = sqlite3_get_last_data(db_path,sql)
print("last_text:", last_text)
```

- ![](https://remnote-user-data.s3.amazonaws.com/p8mgStyTPTyeD0cKK4ptc1qlPec-WqbHQbwfhJ7cZ5WVTCReTps5t5ybSQfGI7Yfp8pPd5VS8VKdAzDkohjUca1vI7HbiXesIqwPdvuKffsaCshwL6W6-DIRcYsUmmQ_.png)
-

### 1.1.4. 修改数据

代码

```
#导入sqllite3模块
import sqlite3
#1.硬盘上创建连接
con=sqlite3.connect('first.db')
#获取cursor对象
cur=con.cursor()
try:
    #执行sql创建表
    update_sql = 'update t_person set pname=? where pno=?'
    cur.execute(update_sql, ('小明', 1))
    #提交事务
    con.commit()
    print('修改成功')
except Exception as e:
    print(e)
    print('修改失败')
    con.rollback()
finally:
    # 关闭游标
    cur.close()
    # 关闭连接
    con.close()
```

- ![](https://remnote-user-data.s3.amazonaws.com/p8-SCs6vA1gVaW65Hs8MqS3B5J3aPaaNTaPC9oewgIWXvsi4rBwLjGeiBF7-Y5lLMP8dCXakeI1Vm1auayRhh-2FAmRRbi-VuK62Qj5Uj3OaUXbkpWQfRAwrQacG-EAE.png)

### 1.1.5. 删除数据

代码

```
#导入sqllite3模块
import sqlite3
#1.硬盘上创建连接
con=sqlite3.connect('first.db')
#获取cursor对象
cur=con.cursor()
#执行sql创建表
delete_sql = 'delete from t_person where pno=?'
try:
    cur.execute(delete_sql, (2,))
    #提交事务
    con.commit()
    print('删除成功')
except Exception as e:
    print(e)
    print('删除失败')
    con.rollback()
finally:
    # 关闭游标
    cur.close()
    # 关闭连接
    con.close()
```

- ![](https://remnote-user-data.s3.amazonaws.com/o2ye1TYNmgKxKf8M0Ti9Ob2mEpjx3EX144TzvokiK5Kl9GXPTw7SYJ3NGk8oi40r2KM6LZoZ4xtNpN5istDDcGboKobWiSQ4RL07v7sE-N5qSQMhFguAC55UDeWMmAtf.png)

unpy 发表于 2023-10-25 17:04

GMCN 发表于 2022-12-29 10:11
支持加密吗

默认的没有

需要安装 sqlcipher , 然后就可以了

from pysqlcipher3 import dbapi2 as sqlite3
....
cursor.execute("PRAGMA key='mypassword'")

sghades 发表于 2023-11-1 20:39

python处理sqlite数据,大概150万行数据,读取到内存里会爆,只能用sql将处理放在sqlite内处理,但是效率低下,请问有没有办法加载在内存里处理?

ChineseCabbage 发表于 2022-12-29 00:28

{:301_1002:}{:301_974:}{:301_973:}前排支持

tiantou 发表于 2022-12-29 08:28

谢谢锟斤拷锟斤拷

imcuer 发表于 2022-12-29 09:05

Python读取sqlite3 {:1_921:}

navis1mple 发表于 2022-12-29 09:39

6666666666666666666

GMCN 发表于 2022-12-29 10:11

支持加密吗

89684828 发表于 2022-12-29 10:23

感谢楼主分享,支持一下!

vethenc 发表于 2022-12-29 10:27

感谢分享,非常实用的库

xxl1039 发表于 2022-12-29 10:29

感谢分享。

sjw166029 发表于 2022-12-29 10:34

还不错,支持!!!
页: [1] 2
查看完整版本: Python读取sqlite3数据库中的数据