知识内容:
1.sqlite数据库介绍
2.sqlite数据库操作
一、sqlite数据库介绍
1.sqlite数据库
sqlite数据库:轻量级的数据库,一般开发中使用sqlite数据库,上线后将sqlite数据库换成其他数据库(比如MySQL、MongoDB)来进行快速开发
sqlite的数据库操作相对来说比较简单,sqlite是python3中自带的数据库,不用安装,python3中的sqlite3是操作sqlite数据库的模块,可以装一个叫sqlitebrowser的软件浏览sqlite数据库中的数据
2.现在的数据库分类
- 数据库现在主要分 关系型数据库(传统比如MySQL oracle等)
- NoSQL(新式比如 mongodb)
- 其他数据库(比如 fb 的图数据库)
二、sqlite数据库操作
1.数据库结构
传统数据库以表的形式存储数据 一张表可以有很多个字段 以用户表为例, 存储 4 个数据的表结构如下 用户 id 用户名 密码 邮箱 范例数据如下 1 wyb 666 wyb@qq.com 2 xxx 333 xxx@qq.com
2.关于SQL语言
sql语句详细:http://www.cnblogs.com/wyb666/p/9017402.html
1 数据库通过 SQL 来操作数据 2 SQL (结构化查询语言)-> 操作数据库的接口 也就是操作数据库的方法 3 增加数据 删除数据 修改数据 查询数据 4 CRUD 5 create retrieve update delete
3.sqlite操作数据库
几种关系型数据库的用法和 sql 语法都极度相似,开发中一般会用 sqlite 数据库,部署到服务器上的时候才会使用 mysql 等数据库
直接看下面代码:
1 # __author__ = "wyb" 2 # date: 2018/6/27 3 import sqlite3 4 5 # SQL 语句示例: 6 # INSERT INTO 7 # `users`(`id`,`username`,`password`,`email`) 8 # VALUES \ 9 # (2,'','',NULL); 10 # 11 # UPDATE `users` SET `username`=? WHERE `_rowid_`='2'; 12 # UPDATE `users` SET `password`=? WHERE `_rowid_`='2'; 13 # UPDATE `users` SET `email`=? WHERE `_rowid_`='2'; 14 15 16 """ 17 下面是 python 操作 sqlite 数据库的范例代码 18 """ 19 20 21 # 创建数据库中的表 22 def create(conn): 23 # 注意 CREATE TABLE 这种语句不分大小写 24 sql_create = ''' 25 CREATE TABLE `users` ( 26 `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 27 `username` TEXT NOT NULL UNIQUE, 28 `password` TEXT NOT NULL, 29 `email` TEXT 30 ) 31 ''' 32 # 用 execute 执行一条 sql 语句 33 conn.execute(sql_create) 34 print('创建成功') 35 36 37 # 向数据库中插入数据 38 def insert(conn, username, password, email): 39 sql_insert = ''' 40 INSERT INTO 41 users(username,password,email) 42 VALUES 43 (?, ?, ?); 44 ''' 45 # 下面的写法用 string.format 拼 sql, 是一个严重的安全漏洞 -> SQL注入 46 # 会被 SQL 注入 47 # sql = ''' 48 # INSERT INTO 49 # users(username,password,email) 50 # VALUES 51 # ("{}", "{}", "{}") 52 # '''.format('123', '345', 'a.com') 53 # conn.execute(sql) 54 # 参数拼接要用 ?,execute 中的参数传递必须是一个 tuple 类型 55 conn.execute(sql_insert, (username, password, email)) 56 print('插入数据成功') 57 58 59 # 查询数据 60 def select(conn): 61 sql = ''' 62 SELECT 63 * 64 FROM 65 users 66 ''' 67 # 这是读取数据的套路 68 cursor = conn.execute(sql) 69 print('所有数据', list(cursor)) 70 # for row in cursor: 71 # print(row) 72 73 74 # 删除数据 75 def delete(conn, user_id): 76 sql_delete = ''' 77 DELETE FROM 78 users 79 WHERE 80 id=? 81 ''' 82 # 注意, execute 的第二个参数是一个 tuple 83 # tuple 只有一个元素的时候必须是这样的写法 84 conn.execute(sql_delete, (user_id,)) 85 86 87 # 更新数据 88 def update(conn, user_id, email): 89 """ 90 UPDATE 91 `users` 92 SET 93 `email`='gua', `username`='瓜' 94 WHERE 95 `id`=6 96 """ 97 sql_update = ''' 98 UPDATE 99 `users` 100 SET 101 `email`=? 102 WHERE 103 `id`=? 104 ''' 105 conn.execute(sql_update, (email, user_id)) 106 107 108 # 主程序 109 def main(): 110 # 指定数据库名字并打开 -> 没有会自动创建 111 db_path = 'web8.sqlite' 112 conn = sqlite3.connect(db_path) 113 print("打开数据库") 114 115 # create 116 # 打开数据库后 就可以用 create 函数创建表 -> 注意创建表只能创建一次 创建已创建的表会报错 117 # create(conn) 118 119 # insert 120 # 然后可以用 insert 函数插入数据 -> 注意插入一次后下面的数据就不能再插入 因为用户名有限制(unique) 121 # insert(conn, 'test', '123456', '[email protected]') 122 123 # delete 124 # 可以用 delete 函数删除数据 125 # delete(conn, 1) 126 127 # update 128 # 可以用 update 函数更新数据 129 # update(conn, 1, '[email protected]') 130 # select 函数查询数据 131 select(conn) 132 133 # 最后提交: 134 # 必须用 commit 函数提交你的修改 135 # 否则你的修改不会被写入数据库 136 conn.commit() 137 # 用完数据库要关闭 138 conn.close() 139 140 141 if __name__ == '__main__': 142 main()
4.SQL注入问题
SQL注入:所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将恶意的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入恶意SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句
比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击
SQL注入实例: