内容:
1.pymysql介绍
2.pymysql基本使用
3.数据库加密
参考:http://www.cnblogs.com/wupeiqi/articles/5713330.html
1.pymysql介绍
pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同,在python3 中以及不支持MySQLdb这个模块了,所有我们现在只用学习pymysql即可
安装:
1 pip3 install pymysql
2.pymysql基本使用
(1)预备知识:SQL
sql详细:http://www.cnblogs.com/wyb666/p/9017402.html
1 数据库通过 SQL 来操作数据 2 SQL (结构化查询语言)-> 操作数据库的接口 也就是操作数据库的方法 3 增加数据 删除数据 修改数据 查询数据 4 CRUD 5 create retrieve update delete
(2)使用pymysql操作MySQL的大致流程
1 import pymysql 2 3 # 创建连接 4 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1') 5 # 创建游标 6 cursor = conn.cursor() 7 8 # 执行SQL,并返回收影响行数 9 effect_row = cursor.execute("update hosts set host = '1.1.1.2'") 10 11 # 执行SQL,并返回受影响行数 12 #effect_row = cursor.execute("update hosts set host = '1.1.1.2' where nid > %s", (1,)) 13 14 # 执行SQL,并返回受影响行数 15 #effect_row = cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)]) 16 17 18 # 提交,不然无法保存新建或者修改的数据 19 conn.commit() 20 21 # 关闭游标 22 cursor.close() 23 # 关闭连接 24 conn.close()
(3)对以上过程的封装
看到这里你可能会好奇,以上那种用法不是蛮好吗,直接从上到下执行代码,干嘛还要封装,封装是为了代码的逻辑性更强,另外代码具有更多的可拓展性,我们自己封装直接封装成函数即可,不必封装成类(那样也可以不过太麻烦太复杂了),当然我们也可以使用别人的封装(后面要学到的SQLAchemy就是一种简单的封装,其将对数据库的操作封装成对类的操作)
SQL操作无非可分为以下几种:
- 创建库表
- 增删改查数据
所以我将这些功能封装成相应的函数即可,如下所示:
1 # __author__ = "wyb" 2 # date: 2018/8/18 3 import pymysql 4 5 # 创建数据库中的表 6 def create(conn): 7 # 注意 CREATE TABLE 这种语句不分大小写 8 sql_create = ''' 9 CREATE TABLE `users` ( 10 `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 11 `username` TEXT NOT NULL UNIQUE, 12 `password` TEXT NOT NULL, 13 `email` TEXT 14 ) 15 ''' 16 # 用 execute 执行一条 sql 语句 17 conn.execute(sql_create) 18 print('创建成功') 19 20 21 # 向数据库中插入数据 22 def insert(conn, username, password, email): 23 sql_insert = ''' 24 INSERT INTO 25 users(username,password,email) 26 VALUES 27 (?, ?, ?); 28 ''' 29 # 下面的写法用 string.format 拼 sql, 是一个严重的安全漏洞 -> SQL注入 30 # 会被 SQL 注入 31 # sql = ''' 32 # INSERT INTO 33 # users(username,password,email) 34 # VALUES 35 # ("{}", "{}", "{}") 36 # '''.format('123', '345', 'a.com') 37 # conn.execute(sql) 38 # 参数拼接要用 ?,execute 中的参数传递必须是一个 tuple 类型 39 conn.execute(sql_insert, (username, password, email)) 40 print('插入数据成功') 41 42 43 # 查询数据 44 def select(conn): 45 sql = ''' 46 SELECT 47 * 48 FROM 49 users 50 ''' 51 # 这是读取数据的套路 52 cursor = conn.execute(sql) 53 print('所有数据', list(cursor)) 54 # for row in cursor: 55 # print(row) 56 57 58 # 删除数据 59 def delete(conn, user_id): 60 sql_delete = ''' 61 DELETE FROM 62 users 63 WHERE 64 id=? 65 ''' 66 # 注意, execute 的第二个参数是一个 tuple 67 # tuple 只有一个元素的时候必须是这样的写法 68 conn.execute(sql_delete, (user_id,)) 69 70 71 # 更新数据 72 def update(conn, user_id, email): 73 """ 74 UPDATE 75 `users` 76 SET 77 `email`='gua', `username`='瓜' 78 WHERE 79 `id`=6 80 """ 81 sql_update = ''' 82 UPDATE 83 `users` 84 SET 85 `email`=? 86 WHERE 87 `id`=? 88 ''' 89 conn.execute(sql_update, (email, user_id)) 90 91 92 # 主程序 93 def main(): 94 # 指定数据库名字并打开 -> 没有会自动创建 95 # 创建连接 96 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='wyb') 97 print("打开数据库") 98 # 创建游标 99 cursor = conn.cursor() 100 101 # create 102 # 打开数据库后 就可以用 create 函数创建表 -> 注意创建表只能创建一次 创建已创建的表会报错 103 # create(cursor) 104 105 # insert 106 # 然后可以用 insert 函数插入数据 -> 注意插入一次后下面的数据就不能再插入 因为用户名有限制(unique) 107 # insert(cursor, 'test', '123456', '[email protected]') 108 109 # delete 110 # 可以用 delete 函数删除数据 111 # delete(cursor, 1) 112 113 # update 114 # 可以用 update 函数更新数据 115 # update(cursor, 1, '[email protected]') 116 # select 函数查询数据 117 select(cursor) 118 119 # 最后提交: 120 # 必须用 commit 函数提交你的修改 121 # 否则你的修改不会被写入数据库 122 conn.commit() 123 # 用完数据库要关闭 124 cursor.close() 125 conn.close() 126 127 128 if __name__ == '__main__': 129 main()
(4)fetch数据类型
默认获取的数据是元祖类型,如果想要或者字典类型的数据,即:
1 import pymysql 2 3 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1') 4 5 # 游标设置为字典类型 6 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) 7 r = cursor.execute("call p1()") 8 9 result = cursor.fetchone() 10 11 conn.commit() 12 cursor.close() 13 conn.close()
3.数据库加密