数据库的可视化工具和pymysql模块

一.数据库的可视化工具

navicate下载地址:https://pan.baidu.com/s/1bpo5mqj

掌握:
#1. 测试+链接数据库
#2. 新建库
#3. 新建表,新增字段+类型+约束
#4. 设计表:外键
#5. 新建查询
#6. 备份库/表

#注意:
批量加注释:ctrl+?键
批量去注释:ctrl+shift+?键

二.pymysql模块

#本质pymysql模块就是一个套接字客户端
import pymysql #pip3 install 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)#游标

# rows=cursor.execute('show tables;')
rows=cursor.execute('select * from class;')#这是游标执行sql语句
print(rows)

# print(cursor.fetchone())  #一次只查一行
# print(cursor.fetchmany(2))
# print(cursor.fetchall())
# print(cursor.fetchall())

#绝对
# print(cursor.fetchall())
# cursor.scroll(3,'absolute')#绝对移动 往后移动3条取到第四条
# print(cursor.fetchone())

#相对
print(cursor.fetchone())
print(cursor.fetchone())
cursor.scroll(1,'relative')#相对于当前的位置往后移动一条
print(cursor.fetchone())

cursor.close()
conn.close()

三.防止sql注入的问题

5.1什么是sql注入的问题

通过输入一堆特殊的字符串来改变sql语句的执行逻辑,从而改变程序的执行逻辑,绕过认证环节,直接登到后台
注意:--表示把sql语句后面的部分都注释掉了
import pymysql #pip3 install 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)
print(sql)


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

cursor.close()
conn.close()
sql注入相关代码

5.2sql注入的原理

无非是字符串的拼接操作

5.3为什么不让输特殊符号

因为特殊符号会改变sql语句的执行逻辑

5.4如何防止sql注入呢

import pymysql #pip3 install 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()
解决办法相关代码

四.增删改查

import pymysql #pip3 install 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='insert into user(username,password) values(%s,%s)'
# rows=cursor.execute(sql,('EGON','123456'))
# print(rows)
# print(cursor.lastrowid)

# rows=cursor.execute('update user set username="alexSB" where id=2')
# print(rows)

# 一次插入多行记录
sql='insert into user(username,password) values(%s,%s)'
rows=cursor.executemany(sql,[('lwz','123'),('evia','455'),('lsd','333')])#一个小元祖就是一个记录
print(rows)
print(cursor.lastrowid)#到底现在记录到多少条了

conn.commit() # 只有commit提交才会完成真正的修改,只要不提交他,前面的改都不会真的改
cursor.close()
conn.close()

 

posted @ 2019-01-15 20:03  王苗鲁  阅读(406)  评论(0)    收藏  举报