首先连接数据库
import pymysql
db=pymysql.connect('localhost','root','111','db_1')
cursor=db.cursor()
一、查看创建视图的权限
# 视图 是一种虚拟存在的表,可隐藏一些数据
sql1 = "select Select_priv,Create_view_priv from mysql.user where user='root';"
cursor.execute(sql1)
try:
result = cursor.fetchall()
for row in result:
Select_priv=row[0]
Create_view_priv=row[1]
print("Select_priv=%s,Create_view_priv=%s"%(Select_priv,Create_view_priv))
except:
print("Error: unable to fetch data")
# Select_priv属性表示用户是否具有select权限,Y表示具有,N表示不具有
# Create_view_priv属性表示用户是否具有create view权限
# 用户名参数表示要查询是否拥有drop权限的用户,该参数需要用单引号引起来
二、 使用create view语句创建视图
sql2 = "create view info_view1(info_name,info_sex,info_birthday)\
as select name,sex,birthday\
from information;"
cursor.execute(sql2)
三、三种方法查看视图
describe
#try:
# sql3 = "desc info_view1;"
# cursor.execute(sql3)
# result=cursor.fetchall()
# for row in result:
# a1 = row[0]
# a2 = row[1]
# a3 = row[2]
# print(a1,a2,a3)
#except:
# print("Error: unable to fetch data")
show table status
try:
sql3 = "show table status like 'info_view1';"
cursor.execute(sql3)
result=cursor.fetchall()
# for row in result:
# a1 = row[0]
# a2 = row[1]
# a3 = row[2]
# print(a1,a2,a3)
print(result)
except:
print("Error: unable to fetch data")
# 查看本表 会看到,视图是一个虚表
#try:
# sql3 = "show table status like 'information';"
# cursor.execute(sql3)
# result=cursor.fetchall()
## for row in result:
## a1 = row[0]
## a2 = row[1]
## a3 = row[2]
## print(a1,a2,a3)
# print(result)
#except:
# print("Error: unable to fetch data")
查看视图 show create view
try:
sql3 = "show create view info_view1;"
cursor.execute(sql3)
result=cursor.fetchall()
# for row in result:
# a1 = row[0]
# a2 = row[1]
# a3 = row[2]
# print(a1,a2,a3)
print(result)
except:
print("Error: unable to fetch data")
四、使用alter语句修改视图
sql1 = "alter view info_view1(info_name) \
as select name\
from information;"
# with check option;"
# "CHECK OPTION on non-updatable view 'db_1.info_view1'
sql2 = "desc info_view1;"
cursor.execute(sql1)
cursor.execute(sql2)
result = cursor.fetchall()
print(result)
五、更新视图
## 更新视图其实就是更新表中的数据,前提情况下表中需要有数据
sql1 = "update info_view1 set info_name='xiaoming';"
cursor.execute(sql1)
sql2 = "select * from information;"
cursor.execute(sql2)
更新视图的限制
# 视图中有聚合函数的
# 视图中有union、union all、distinct、group by等关键字的
# 常量视图
# 视图中select语句包括子查询的
# 由不可更新视图导出的视图
# 创建视图时,algorithm为temptable类型
# 视图对应的表上存在没有默认值的列,该列也没有包含在视图中
# 以上七中均不可更新视图
六、删除视图
sql1 = "drop view if exists info_view1;"
sql2 = "show create view info_view1;"
cursor.execute(sql1)
cursor.execute(sql2)
result = cursor.fetchall()
print(result)
#出现以上错误表示删除成功!