漫天飞雪

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
--------------------------正则表达式匹配-------------------------------------------------
正则表达式用于模糊查询 like 仅支持 % 和 _ 远没有正则表达式灵活
当然绝大多数情况下 like足够使用
语法:
insert into emp values(1,"laowangba","男",26,1,"总监",5800);
insert into emp values(1,"laoliba","男",26,1,"总监",5800);
insert into emp values(1,"laocheng","男",26,1,"总监",5800);
select *from table where name regexp "正则表达式";
----------------------------------mysql用户管理---------------------------------------
mysql用户指的是什么?
我们每一次在操作前都需要指定账号和密码,这个账号就是mysql的用户;
为什么要管理?
一个公司不可能只有一个工程师,大公司,不不仅有很多工程师 还有很多不同部门,但是数据库服务器只有一个,大家都要访问,这就涉及到用户和权限问题了
一个工程师对应一个账户,
哪些工程师可以操作哪些数据库,哪些表,甚至哪些字段,都可以进行控制,例如,腾讯,有qq和微信不同项目,qq的工程师,就不应该去访问微信项目的数据;

mysql是如何管理的?
mysql本质上是一款cs软件,它具备用户认证!
我们有没有做过用户认证呢? ATM! 购物车,都做过,
我们是如何实现的?写入文件,mysql也是一样的,
登录流程简述!
只不过它把文件称为表
那我们需要添加账户,要怎么添加呢?
把用户信息写入表中就可以了,
我们来看看它都把数据放在哪个表中了!

自带的mysql数据库,
user
db
table_priv
columns_priv
四个表用于存储账户信息以及权限
权限优先级:
user->db->table_priv->columns_priv
desc查看结构
内置root账户字段信息解析


创建账号:
create user 用户名@"ip地址" "identified" by 密码;
create user tom@"192.168.101" identified by "123";
该语句表明tom只能在101机器上使用,别的机器就无法登录
用%可以表示在任意机器可用
注意:该方式创建的账号没有任何权限,需要使用授权语句

授权:
授权语句执行时如果账号不存在会自动创建账号 所以推荐使用
注意:默认只有root才能为其他账号授权

grant all on *.* to tom@"localhost" identified by "123";
该语句中的all 也不包括grant权限
*.* 表示任何数据库 任何表 存储在user表

grant all on db.* to tom@"localhost" identified by "123"
db.* 表示该用户可以操作db数据库的任何表 存储在 db表

grant all on db.t1 to tom@"localhost" identified by "123"
db.* 该用户可以操作db数据库的t1表 存储在 table_privi表

精确到字段 和 操作级别
grant select(id) on db.t1 to tom@"localhost" identified by "123"
该用户只能查询 db下的t1表

grant all on *.* to tom@"localhost" identified by "123" with grant option;
with grant option 表示该账户可以将权限授予其他用户

收回权限
REVOKE all privileges [column] on db.table from user@"host";


删除用户
drop user@"host"

flush privileges;
刷新权限表
------------------------------pymysql模块---------------------------------------------

pymysql是什么?
python编写的mysql客户端
pip install pymysql

无论是什么客户端第一件事干啥?
c/s程序 socket
链接服务器
指定相关的参数
获取链接对象
获取游标对象
执行sql语句
获取执行结果
提取数据
fetchone
fetchall
fetchmany
scroll

增删改查
指定查询结果为字典类型
pymysql.cursor.DictCursor

sql 注入
实现用户登录注册
登录时 演示sql注入
如何避免
客户端限制
模拟请求怎么破?
服务器端验证
执行sql  如果是select 语句返回的是 查询的条数

import pymysql

"""pymysql使用步骤
核心类 Connect链接用 和Cursor读写用
1.与数据库服务器建立链接
2.获取游标对象 (用于发送和接收数据)
3.用游标执行sql语句
4.使用fetch方法来获取执行的结果
5.关闭链接 先关游标 再关链接

游标的常用方法
1.创建游标 conn.cursor(指定查询结果的数据类型)
2.excute 执行sql
3.fetchone(当sql只有一条记录时) many(sql有多条并且需要指定条数) all(多条)
4.scroll 用于修改游标的当前位置

注意: pymysql 默认不提交修改 但是注意(指的是对表中记录的操作不提交) 像删库 删表 是无法撤销的

"""
# 创建链接得到一个链接对象
conn = pymysql.Connect(
host="127.0.0.1", # 数据库服务器主机地址
user="root", # 用户名
password="admin", # 密码
database="day42", #数据库名称
port=3306, # 端口号 可选 整型
charset="utf8" # 编码 可选
)
# 获取游标对象 pymysql.cursors.DictCursor指定 返回的结果类型 为字典 默认是元祖类型
cursor = conn.cursor(pymysql.cursors.DictCursor)

# 查询数据
sql = "select *from emp"

# 执行sql 如果是select 语句返回的是 查询的条数
res = cursor.execute(sql)
print(res)

# 获取查询的结果
# print(cursor.fetchall())
# print(cursor.fetchone())
# print(cursor.fetchone())
# print(cursor.fetchmany(1))
# print(cursor.fetchall())

# scroll
print(cursor.fetchone())
cursor.scroll(-1)
print(cursor.fetchall())


# 关闭链接
cursor.close()
conn.close()
import pymysql
# 创建链接得到一个链接对象
conn = pymysql.Connect(
host="127.0.0.1", # 数据库服务器主机地址
user="root", # 用户名
password="admin", # 密码
database="day42", #数据库名称
port=3306, # 端口号 可选 整型
charset="utf8" # 编码 可选
)
# 获取游标对象 pymysql.cursors.DictCursor指定 返回的结果类型 为字典 默认是元祖类型
cursor = conn.cursor(pymysql.cursors.DictCursor)

# 添加数据
# res = cursor.execute("insert into emp values(100,'胡歌','男',30,1,'job',60000)")
# if res:
# print("插入成功")
# else:
# print("插入失败")
# 提交修改 因为pymysql 模块默认是启用事务的 sql语句 如果不提交 相当于没有执行

# conn.commit()
# res = cursor.execute("drop database day42")


# res = cursor.execute("delete from t1 where id = 1")
# print(res)

try:
cursor.execute("update moneyTable set money = money - 50 where name = '小明'")
#如果小花的账户出问题了 无法更新数据 那就需要回滚
cursor.execute("update moneyTable set money = money + 50 where name = '小花'")
conn.commit()
except:
conn.rollback()

cursor.close()
conn.close()
posted on 2018-12-27 09:45  漫天飞雪世情难却  阅读(290)  评论(0编辑  收藏  举报