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