|
| 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 | + |
| 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 | + |
| 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 | + |
| 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 | + |
| 146 | +```python |
| 147 | +添加了一条记录 |
| 148 | +``` |
| 149 | +### 代码区 5 |
| 150 | +```python |
| 151 | +1 #练习题 添加一个记录,查一下, |
| 152 | +2 |
| 153 | +``` |
| 154 | + |
| 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 | + |
| 181 | +```python |
| 182 | +修改成功 |
| 183 | +``` |
| 184 | +### 代码区 7 |
| 185 | +```python |
| 186 | +1 #练习题 自己修改一下记录,并查询一下结果 |
| 187 | +2 |
| 188 | +``` |
| 189 | + |
| 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 | + |
| 214 | +```python |
| 215 | +删除成功 |
| 216 | +查询到我修改的记录: [] |
| 217 | +``` |
| 218 | +### 代码区 9 |
| 219 | +```python |
| 220 | +1 #练习题 把添加、修改、删除语句综合写一下吧 |
| 221 | +2 |
| 222 | +``` |
| 223 | + |
| 224 | + |
0 commit comments