day38_8_22数据库(navicat操作)
补充:
exist存在EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回查询的记录,而是返回一个真假值,True或False。
当返回True时,外层查询语句将进行查询当返回值为False时,外层查询语句不进行查询。
select * from emp
where exists
(select id from dep where id > 203);
一。NAVICAT
navicat是一个数据库管理工具,可以管理数据库,简化数据库的操作。
下载地址:https://pan.baidu.com/s/1bpo5mqj
navicat需要熟悉以下操作:
#1. 测试+链接数据库
#2. 新建库
#3. 新建表,新增字段+类型+约束
#4. 设计表:外键
#5. 新建查询
#6. 建立表模型 #注意:
批量加注释:ctrl+?键
批量去注释:ctrl+shift+?键
之前哪些语句都被navicat给封装了,点点鼠标就可以操作数据库。
在这里要注意,建立数据库时要选择编码utf8,而utf8mb4可以存表情。
设置主键的时候不要忘记自增选项:
二。pymysql
在pycharm中有专门与mysql连接的模块,就是pymysql。
下载模块后,就可以编写语句连接数据库了:
conn = pymysql.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
password = '',
database = 'day38',
charset = 'utf8'
)
导入模块之后,先使用connect关键字配置数据库连接,
通过连接可以设置光标cursor执行语句:
cursor = conn.cursor(pymysql.cursors.DictCursor)
sql = 'select * from teacher'
res = cursor.execute(sql)
其中pymysql.cursors.DictCursor是将输出的结果打印成字典格式
cursor.execute()执行SQL语句
cursor.fetchone()取出一条语句
cursor.fetchall()取出所有语句,以列表+字典形式输出
cursor.scroll(1,‘absolute’)将光标滚动至第一条数据后,绝对位置
cursor.scroll(1,‘relative‘)将光标向后滚动一行,相对位置
三。sql注入问题。
利用下述的方法,可以实现用户的注册于登录,但是原理是将用户直接输入的字符串拼接后放入sql语句中执行。
name = input('用户名>>>:')
pwd = input('密码>>>:')
sql = "select * from user where name = '%s' and password = '%s'"%(name,pwd)
res = cursor.execute(sql)
if res:
print(cursor.fetchall())
但是,当用户输入一些sql特殊意义的字符也会照样执行,比如:‘or 1=1 -- ",就可以将用户所有的数据都打印出来,为了解决这方法,pymysql有特有的方法:
name = input('用户名>>>:')
pwd = input('密码>>>:')
sql = "select * from user where name = %s and password = %s"
res = cursor.execute(sql,(name,pwd))
if res:
print(cursor.fetchall())
execute除了执行sql语句之外,还可以拼接sql中的%s字符串,可以自动识别sql中%s替换成输入的内容,而不需要“”
四。pymysql增删查改问题
在pycharm中使用增删改操作时,如果不加入conn.commit,就不能进行操作,需要加这个语句才行,而且每次操作都要使用。
sql2 = "insert into user(name,password) values('lzx32','')"
res = cursor.execute(sql2)
conn.commit()
这样是比较烦的,但是可以设置自动的。
conn = pymysql.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
password = '',
database = 'day38',
charset = 'utf8',
autocommit = True
)
在连接中设置autocommit恒等于True就行。
最新文章
- HttpURLConnection 下载文件
- SVO实时全局光照:Sparse Voxel Octree based Global Illumination (SVO GI)
- 通过微软的cors类库,让ASP.NET Web API 支持 CORS
- DataGridView显示时间格式
- pyenv简介——Debian/Ubuntu中管理多版本Python
- Struts2传参碰到的奇怪问题
- 解决Popup StayOpen=true时,永远置顶的问题
- UITableViewCell嵌套UITableView的正确姿势
- ok6410 nandflash 启动uboot 超过256k怎么办
- models批量生成数据
- Codeforces 835C-Star sky
- Spring框架学习05——AOP相关术语详解
- iOS UI基础-19.0 UICollectionView
- linux内核中的PTP clock是什么?
- ubuntu设置静态ip后不能上网
- Mac下的Docker及Kubernetes(k8s)本地环境搭建与应用部署、管理界面kubernetes-dashboard
- Xpath string()提取多个子节点中的文本
- (杭电 1702)ACboy needs your help again!
- C++中多线程与Singleton的那些事儿
- 洛谷——P1692 部落卫队