Python学习之路_day_42(数据库之pymysql)

一、pymysql模块(安装与查询)
1、安装pymysql(python专用的mysql客户端套接字)
pip3 install pymysql

2、mysql 查询
import pymysql

conn=pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='jxtz0927',
    database='db40',
    charset='utf8'    #防止乱码
)
cursor=conn.cursor(pymysql.cursors.DictCursor) #将产生的结果以字典的形式显示 [{'Tables_in_db40': 'department'}, {'Tables_in_db40': 'employee'}]
# cursor=conn.cursor()  # (('department',), ('employee',))

# rows=cursor.execute('show tables;')  #rows 为受影响的行数
rows=cursor.execute('select * from class;')
print(rows)   #2

print(cursor.fetchone())    #一条
print(cursor.fetchmany(2))  #几条
print(cursor.fetchall())    #全部

cursor.scroll(3,'absolute')  #mode='absolute',绝对模式,从最开始位置向后移三条
cursor.scroll(1,'relative')  #mode='relative',相对模式,从当前位置向后移一条

cursor.close()
conn.close()

二、pymysql模块(防止sql注入问题)
1、错误做法, 自行对字符串进行拼接,引发sql注入问题 (name= egon' --asdfg; name=xxxx'or 1=1--asdfg)
import pymysql

conn=pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123',
    database='db42',
    charset='utf8'
)

cursor=conn.cursor(pymysql.cursors.DictCursor)

inp_user=input('用户名>>:').strip() #inp_user=""
inp_pwd=input('密码>>:').strip() #inp_pwd=""
sql="select * from user where username='%s' and password='%s'" %(inp_user,inp_pwd) #自行拼接,引发sql注入问题
print(sql)

rows=cursor.execute(sql)
if rows:
    print('登录成功')
else:
    print('登录失败')

cursor.close()
conn.close()

2、在服务端防止sql注入问题:不要自己拼接字符串,让pymysql模块去拼接
import pymysql

conn=pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123',
    database='db42',
    charset='utf8'
)
cursor=conn.cursor(pymysql.cursors.DictCursor)

inp_user=input('用户名>>:').strip() #inp_user=""
inp_pwd=input('密码>>:').strip() #inp_pwd=""
sql="select * from user where username=%s and password=%s"
print(sql)

rows=cursor.execute(sql,(inp_user,inp_pwd))
if rows:
    print('登录成功')
else:
    print('登录失败')

cursor.close()
conn.close()

三、pymysql模块(增删改)
import pymysql

conn=pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123',
    database='db42',
    charset='utf8'
)
cursor=conn.cursor(pymysql.cursors.DictCursor)

sql='update user set username="alexSB" where id=2'
rows=cursor.execute(sql) #改数据
print(rows)
print(cursor.lastrowid)  

sql='insert into user(username,password) values(%s,%s)'
rows=cursor.executemany(sql,[('lwz','123'),('evia','455'),('lsd','333')])  #一次插入多行记录
print(rows)
print(cursor.lastrowid)  #显示插到哪行了(id)

conn.commit()   # 只有commit提交才会完成真正的修改
cursor.close()
conn.close()

猜你喜欢

转载自www.cnblogs.com/zhaijihai/p/9664562.html