MySQL基础之ⓓ pymysql模块

a 夏天 提交于 2020-02-03 16:56:26

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()

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!