python连接数据库(pymysql)

内容:

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.数据库加密

猜你喜欢

转载自www.cnblogs.com/wyb666/p/9489373.html