Skip to content

Commit bb691a8

Browse files
authored
Create kc52.md
1 parent 7222348 commit bb691a8

File tree

1 file changed

+224
-0
lines changed

1 file changed

+224
-0
lines changed

kc/kc52.md

Lines changed: 224 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,224 @@
1+
# 5-2 python操作数据库 sqlite
2+
数据库,通过字面意思的理解为存储数据的仓库
3+
4+
数据库是一个独立的应用,它为了方便开发者对其进行操作,提供了对应的数据操作指令(也可以理解为sql语句,一套独立的规范定义)
5+
6+
当前的数据库类型有很多,每种数据库,都有自己的应用领域
7+
8+
常用数据库有mysql、oracle(重型)、sqlserver、sqlite等。
9+
10+
因为数据库是一个独立体,要对一个数据库操作,大体需要分两步来完成
11+
12+
- 通过驱动建立连接
13+
- 通过对应的语法规范进行数据操作
14+
15+
## 1.使用python连接sqlite
16+
SQLite类似于微软的Access数据库,是一个软件库,不需要单独去配置服务(sqlite3.def、sqlite3.dll、sqlite3.exe有这三个
17+
18+
就可以运行数据库的操作,sqlite3.def和sqlite3.dll这两个文件需要根据自己系统下载32或者64位)。
19+
20+
SQLite常用于一些门户网站或者数据量不大的逻辑不复杂的存储
21+
22+
python与sqlite进行连接,需要引入sqlite3库,在python2.5x及以上版本,已经集成了该库,因此不需要单独进行pip安装(如果是
23+
24+
mysql,需要安装pymysql库)
25+
26+
注意:每种数据库,都有自己的一套语法规则,使用之前,要先大概熟悉一下, 对应数据库的语法
27+
28+
## 2.连接sqlite
29+
连接sqlite需要用到sqlite3的connect函数,函数传入数据库文件的路径地址(本课程已经创建数据库dmb.db数据库文件,存储路径为
30+
31+
程序目录下的sqlite目录,代码中写的为相对路径..\..\sqlite\dmb.db)
32+
33+
系统已创建数据库dmb.db数据库文件,并初始创建了表:dmbtable
34+
### 代码区 1
35+
```python
36+
1 import sqlite3
37+
2
38+
3 # 系统集成了一个sqlite数据库,
39+
4 dbpath = '..\..\sqlite\dmb.db'
40+
5 # 返回一个操作sqlite的连接对象
41+
6 conn = sqlite3.connect(dbpath)
42+
7 print('连接上数据库了')
43+
8 # 关闭数据库连接
44+
9conn.close()
45+
```
46+
![4](https://user-images.githubusercontent.com/103555341/163546933-bee710b5-943e-454e-b00d-922d2b897614.jpg)
47+
```python
48+
连接上数据库了
49+
```
50+
## 3.怎么样查看数据库下的所有表
51+
如果要对数据库进行操作,需要用到游标,通过connect返回的连接对象,创建游标,根据游标完成数据库的操作
52+
### 代码区 2
53+
```python
54+
1 import sqlite3
55+
2
56+
3 # 系统集成了一个sqlite数据库,
57+
4 dbpath = '..\..\sqlite\dmb.db'
58+
5 # 返回一个操作sqlite的连接对象
59+
6 conn = sqlite3.connect(dbpath)
60+
7 print('连接上数据库了')
61+
8
62+
9 # 通过连接对象,创建一个游标
63+
10 cursor = conn.cursor()
64+
11
65+
12 # 通过游标的execute方法 ,执行对应的操作,执行成功,返回执行的记录集
66+
13 ret = cursor.execute('SELECT * FROM sqlite_master')
67+
14
68+
15 # 遍历记录集中的所有数据
69+
16 for row in ret:
70+
17 print(row)
71+
18
72+
19 cursor.close()
73+
20 conn.close()
74+
21
75+
```
76+
![4](https://user-images.githubusercontent.com/103555341/163546933-bee710b5-943e-454e-b00d-922d2b897614.jpg)
77+
```python
78+
连接上数据库了
79+
('table', 'dmbtable', 'dmbtable', 2, 'CREATE TABLE dmbtable(id int primary key, name text, age int, height int)')
80+
('index', 'sqlite_autoindex_dmbtable_1', 'dmbtable', 3, None)
81+
```
82+
**上面可以看到,当前的数据库里有表"dmbtable",这个表的创建语句为create table..**
83+
84+
**表包含id, name, age, height 4个字段,并且id、age、height为整型,其它为字符串, id为主键,不允许重复**
85+
86+
## 4.sqlite的常用操作语句
87+
sqlite和其它数据库一样,为方便操作,提供了对应的操作语句
88+
89+
- select 查询表中的数据 语法结构为 select col1,col2 from table where 条件 执行成功,返回对应表的记录集
90+
- insert 向表中添加记录 语法结构为 insert into table(col1, col2) values(val1, val2)
91+
- update 修改表中的记录 语法结构为 update table set col1=val1 where 条件
92+
- delete 删除表中的记录 语法结构为 delete from table where 条件
93+
94+
## 5.sqlite查询记录-select
95+
如果要查询对应表中的所有数据,可以用*(查询所有字段,但在实际项目应用中,不建议使用,会给数据增加额外的开销)来代替字段名
96+
97+
select后面的where语句,当你需要查询所有数据的话,不写,如果需要查满足某条件的记录时,就需要写对应的条件
98+
### 代码区 3
99+
```python
100+
1 import sqlite3
101+
2
102+
3 # 系统集成了一个sqlite数据库,
103+
4 dbpath = '..\..\sqlite\dmb.db'
104+
5 conn = sqlite3.connect(dbpath)
105+
6
106+
7 cursor = conn.cursor()
107+
8 # 如果执行成功 返回的是一个元组列表
108+
9 ret = cursor.execute('select id, name, age, height from dmbtable')
109+
10 values = ret.fetchall()
110+
11
111+
12 print('我查询到的数据是', values)
112+
13 # 关闭游标和连接对象 这两个语句一般放在程序的尾部,即操作完成可以是多个语句完成之后 ,关闭,减少内存开销
113+
14 cursor.close()
114+
15 conn.close()
115+
16
116+
```
117+
![4](https://user-images.githubusercontent.com/103555341/163546933-bee710b5-943e-454e-b00d-922d2b897614.jpg)
118+
```python
119+
我查询到的数据是 [(1001, '大美丽', 18, 173), (1003, '张三', 18, 173)]
120+
```
121+
## 6.sqlite添加记录-insert
122+
insert向表中添加记录,添加数据时,要了解对应表字段的数据类型,是否主键(标识记录的唯一性,只能有一条)、可为空,指定对应
123+
124+
的字段进行添加
125+
### 代码区 4
126+
```python
127+
1 import sqlite3
128+
2
129+
3 # 系统集成了一个sqlite数据库,
130+
4 dbpath = '..\..\sqlite\dmb.db'
131+
5 conn = sqlite3.connect(dbpath)
132+
6
133+
7 cursor = conn.cursor()
134+
8
135+
9 # 执行添加记录 id为主键,如果id的编号重复,是会报错的
136+
10 cursor.execute("insert into dmbtable(id, name, age, height) values(1002,'大漂亮', 18, 173)")
137+
11 # 执行添加后,一定要调用commit()方法 ,不然数据是不会保存进数据库的
138+
12 conn.commit()
139+
13 print('添加了一条记录')
140+
14 # 关闭游标和连接对象 这两个语句一般放在程序的尾部,即操作完成可以是多个语句完成之后 ,关闭,减少内存开销
141+
15 cursor.close()
142+
16 conn.close()
143+
17
144+
```
145+
![4](https://user-images.githubusercontent.com/103555341/163546933-bee710b5-943e-454e-b00d-922d2b897614.jpg)
146+
```python
147+
添加了一条记录
148+
```
149+
### 代码区 5
150+
```python
151+
1 #练习题 添加一个记录,查一下,
152+
2
153+
```
154+
![4](https://user-images.githubusercontent.com/103555341/163546933-bee710b5-943e-454e-b00d-922d2b897614.jpg)
155+
## 7.sqlite修改记录-update
156+
修改语句,分两种,带条件和不带条件;不带条件会修改对应字段在表中的所有记录, 带条件,修改满足指定条件的记录
157+
158+
**注意:修改是不可逆的,修改之前请确定语句条件的准确性**
159+
### 代码区 6
160+
```python
161+
1 import sqlite3
162+
2
163+
3 # 系统集成了一个sqlite数据库,
164+
4 dbpath = '..\..\sqlite\dmb.db'
165+
5 conn = sqlite3.connect(dbpath)
166+
6
167+
7 cursor = conn.cursor()
168+
8
169+
9 # 修改1002 大漂亮的年龄 为19岁
170+
10 cursor.execute('update dmbtable set age=20 where id=1002')
171+
11
172+
12 conn.commit()
173+
13 print('修改成功')
174+
14
175+
15 # 关闭游标和连接对象 这两个语句一般放在程序的尾部,即操作完成可以是多个语句完成之后 ,关闭,减少内存开销
176+
16 cursor.close()
177+
17 conn.close()
178+
18
179+
```
180+
![4](https://user-images.githubusercontent.com/103555341/163546933-bee710b5-943e-454e-b00d-922d2b897614.jpg)
181+
```python
182+
修改成功
183+
```
184+
### 代码区 7
185+
```python
186+
1 #练习题 自己修改一下记录,并查询一下结果
187+
2
188+
```
189+
![4](https://user-images.githubusercontent.com/103555341/163546933-bee710b5-943e-454e-b00d-922d2b897614.jpg)
190+
## 7.sqlite删除记录-delete
191+
删除语句,分两种,带条件和不带条件;不带条件会删除表中的所有记录, 带条件,删除满足指定条件的记录
192+
193+
**注意:执行删除语句时,一定注意,一但删除,是不可逆的**
194+
### 代码区 8
195+
```python
196+
1 import sqlite3
197+
2
198+
3 # 系统集成了一个sqlite数据库,
199+
4 dbpath = '..\..\sqlite\dmb.db'
200+
5 conn = sqlite3.connect(dbpath)
201+
6
202+
7 cursor = conn.cursor()
203+
8 # 删除1002 的记录
204+
9 cursor.execute('delete from dmbtable where id=1002')
205+
10 conn.commit()
206+
11 print('删除成功')
207+
12
208+
13 # 关闭游标和连接对象 这两个语句一般放在程序的尾部,即操作完成可以是多个语句完成之后 ,关闭,减少内存开销
209+
14 cursor.close()
210+
15 conn.close()
211+
16
212+
```
213+
![4](https://user-images.githubusercontent.com/103555341/163546933-bee710b5-943e-454e-b00d-922d2b897614.jpg)
214+
```python
215+
删除成功
216+
查询到我修改的记录: []
217+
```
218+
### 代码区 9
219+
```python
220+
1 #练习题 把添加、修改、删除语句综合写一下吧
221+
2
222+
```
223+
![4](https://user-images.githubusercontent.com/103555341/163546933-bee710b5-943e-454e-b00d-922d2b897614.jpg)
224+

0 commit comments

Comments
 (0)