1、安装模块
windows下cmd,输入下列命令:
pip3 install pymysql
2、demo
1 import pymysql 2 3 conn = pymysql.connect(host='localhost', user='root', password='', database='test_db', port=3306) 4 5 cursor = conn.cursor(pymysql.cursors.DictCursor) 6 7 username = input('>>>').strip() 8 9 sql = 'select * from student where sname = "%s"' % username 10 11 print(sql) 12 13 affect_lines_no = cursor.execute(sql) 14 15 result = cursor.fetchone() # 每执行一次,取一条记录 16 17 cursor.close() 18 conn.close() 19 20 # 问题:sql注入,如:输入 uu" or 1=1 -- " 21 # 数据库中没有uu该字段,但是得到了结果! 22 # 查看发出的sql语句就知道了:select * from student where sname = "uu" or 1=1 -- " 23 24 if result: 25 print('成功得到结果!', result) 26 else: 27 print('没有结果!')
3.增删查(CDU)时要记得提交!
import pymysql conn = pymysql.connect(host='localhost', user='root', password='', database='test_db', port=3306) cursor = conn.cursor(pymysql.cursors.DictCursor) caption = input('>>>').strip() sql = 'insert into class(caption) values(%s)' cursor.execute(sql, [caption]) conn.commit() # 事务,无此句,不会有效果! cursor.close() conn.close()
3.executemany执行多个结果
ipt = input('>>>').strip() ipt_lst = ipt.split(',') print(ipt_lst) query = 'insert into class(caption) values (%s)' cursor.executemany(query, ipt_lst) # 执行多个结果,只在插入时有用! ipt_lst --> ['四年级(2)班', '四年级(3)班'] conn.commit() cursor.close() conn.close()
4 fetchall与fetchmany的用法
import pymysql conn = pymysql.connect(host='127.0.0.1', user='root', password='', database='test_db') cursor = conn.cursor(pymysql.cursors.DictCursor) query = 'select * from class' cursor.execute(query) # results = cursor.fetchmany(3) # 取前三条结果 results = cursor.fetchall() cursor.close() conn.close() if len(results) > 1: for i in results: print(i)
5 游标 位置移动 scroll()方法
sql = 'select * from student' cursor.execute(sql) # cursor.scroll(1, mode='relative') # 相对位置移动1 fetchone()后,得到第二条记录 cursor.scroll(2, mode='absolute') # 绝对位置移动2 fetchone()后,得到第三条记录 result = cursor.fetchone() print(result) result = cursor.fetchone() print(result) result = cursor.fetchone() print(result) print(cursor.fetchall()) # 得到剩余全部数据 cursor.close() conn.close()
6.游标的lastrowid属性,得到自增id
# insert_id = cursor.lastrowid + 2 没执行前,是没有该属性的 sql = 'insert into class(caption) values("五年级(2)班")' cursor.execute(sql) print(cursor.lastrowid) conn.commit() cursor.close() conn.close()
7.综合示例:权限管理初步
数据表描述:
权限表:(id,name)
1 订单管理
2 用户管理
3 菜单管理
4 权限分配
5 Bug管理
用户表:(id,name,pwd)
1 Tom 123
2 John 456
用户权限关系表:(user_id, auth_id)
1 1
1 2
2 1
需求:用Python实现
某个用户登录后,查看自己拥有所有权限
import pymysqlconn = pymysql.connect(host='localhost', user='python', password='py', database='python_test_db') cursor = conn.cursor(pymysql.cursors.DictCursor) count = 0 while 1: name = input('请输入用户名:>>>').strip() pwd = input('请输入密 码:>>>').strip() query = "select * from user where name = %s and pwd = %s" cursor.execute(query, (name, pwd)) result = cursor.fetchone() if result: print('登录成功,您拥有的所有权限是:') sql = 'select a.name from auth a left join user_auth_relation ua on ua.auth_id = a.id where ua.user_id = %s ' lines = cursor.execute(sql, result['uid']) results = cursor.fetchall() for i, item in enumerate(results, 1): print('%d %s' % (i, item['name'])) break else: count += 1 print('请重新登录,您还剩%d次机会' % (3 - count)) if count < 3: continue else: break cursor.close() conn.close()
来源:https://www.cnblogs.com/funyou/p/12256093.html