一、完整版SQL语句的查询

select
distinct post,avg(salary)
from
table
where
id > 1
group by
post`
having
avg(salary)>100
order by
avg(salary)
limit 5,5

​ group by:分组之后,分组依据是最小可识别单位,不能再直接获取到其他字段信息,如果想要获取其他字段信息,只能用额外的方法间接获取,上述情况需要你设置严格模式,如果整个SQL语句没有group by默认整体就是一组。

二、聚合函数

  • max
  • min
  • avg
  • sum
  • count

ps:聚合函数只能在分组之后使用

三、distinct和limit

​ distinct(去重)去重一定要满足数据是一模一样的情况下,才能达到去重的效果,如果你查询出来的数据中包含主键字段,那么不可能去重成功。

​ limit 5;只写一个参数,从第一条开始展示5条

​ limit 5,5;从第五条开始,不包含第五条,展示五条

ps:MySQL对大小写不敏感

四、模糊匹配和正则表达式匹配

1、模糊匹配

  • %:多个任意字符

  • _:单个任意字符

2、正则表达式

where name regexp "^j.*(n|y)$"

表示以j开头,n或y结尾,中间是任意字符

.表示匹配除换行符之外的任意字符

*表示o到无穷

+表示1到无穷

?表示0或1

^表示以什么开头

$表示以什么结尾

回顾re模块

findall:分组优先,会将括号内正则匹配到的优先返回

match:从头开始匹配,匹配到一个就返回

search:整体匹配,匹配到一个就返回

res=match('^j.*(n|y)$','jason')

print(res.group())

五、concat和concat_ws

concat和concat_ws在分组之前用

  • concat(name,':',age,':',salary) 用于拼接字符串

  • concat_ws(':',name,age,salary) 与上面的效果一致

与字符串的join方法类似,但有区别:join方法只能用在字符串之间。

':'.join(['1',2,'3']) 由于2是数字,会报错

六、exists

​ exists关键字表示存在,在使用exists关键字使,内层查询语句不返回查询的记录,而是返回一个真假值,True或False。

​ 当返回True时,外层查询语句将进行查询

​ 当返回False时,外层查询语句不进行查询

select * from emp where exists (select id from dep where id>203);

七、pymysql模块

import pymysql

conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
passwoord='123',
database='day38',
charset='utf8' # 不能加—
)
cursor=conn.cursor(pymysql.cursors.DictCursor) # 产生一个游标对象,以字典的形式返回查询结果
sql = 'select * from teacher'
res = cursor.execute(sql) # 执行传入的sql语句
print(res) # res是执行语句返回的数据条数
print(cursor.fetchone()) # 只获取一条数据
print(cursor.fetchone()) # 只获取一条数据
print(cursor.fetchone()) # 只获取一条数据
cursor.scroll(2,'absolute') # 控制光标移动 absolute相对于起始位置,往后移动几位
cursor.scroll(1,'relative') # relative相对于当前位置,往后移动几位
print(cursor.fetchall()) # 获取所有的数据,返回的结果是一个列表 cursor.close()
conn.close()

八、sql注入问题

import pymysql

conn = pymysql.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
password = '123',
database = 'day38',
charset = 'utf8', # 编码千万不要加- 如果写成了utf-8会直接报错
autocommit = True # 这个参数配置完成后 增删改操作都不需要在手动加conn.commit了
)
cursor = conn.cursor(pymysql.cursors.DictCursor) # 产生一个游标对象 以字典的形式返回查询出来的数据 键是表的字段 值是表的字段对应的信息 # sql = 'insert into user(name,password) values("jerry","666")'
# sql = 'update user set name = "jasonhs" where id = 1'
sql = 'delete from user where id = 6'
cursor.execute(sql) """
增删改操作 都必须加一句
conn.commit()操作
"""
# conn.commit()
# username = input('username>>>:')
# password = input('password>>>:')
# sql = "select * from user where name =%s and password = %s"
# print(sql)
# res = cursor.execute(sql,(username,password)) # 能够帮你自动过滤特殊符号 避免sql注入的问题
# # execute 能够自动识别sql语句中的%s 帮你做替换
# if res:
# print(cursor.fetchall())
# else:
# print('用户名或密码错误') """
sql注入 就是利用注释等具有特殊意义的符号 来完成一些骚操作
后续写sql语句 不要手动拼接关键性的数据
而是让excute帮你去做拼接
""" # 不要手动去拼接查询的sql语句
username = input(">>>:").strip()
password = input(">>>:").strip()
sql = "select * from user where username='%s' and password='%s'"%(username,password) # 用户名正确
username >>>: jason' -- jjsakfjjdkjjkjs
# 用户名密码都不对的情况
username >>>: xxx' or 1=1 --asdjkdklqwjdjkjasdljad
password >>>: ''

九、增删改

# 增
sql = "insert into user(username,password) values(%s,%s)"
rows = cursor.excute(sql,('jason','123')) # 修改
sql = "update user set username='jasonDSB' where id=1"
rows = cursor.excute(sql) """
增和改单单执行excute并不会真正影响到数据,需要再执行conn.commit()才可以完成真正的增改
""" # 一次插入多行记录
res = cursor,excutemany(sql,[(),(),()]

SQL语句,pymysql模块,sql注入问题的更多相关文章

  1. Navicat工具、pymysql模块 sql注入

    cls超 Navicat工具.pymysql模块 阅读目录 一 IDE工具介绍 二 pymysql模块 一 IDE工具介绍(Navicat) 生产环境还是推荐使用mysql命令行,但为了方便我们测试, ...

  2. 整理:sql语句优化之SQL Server

    . 增加服务器CPU个数;但是必须明白并行处理串行处理更需要资源例如内存.使用并行还是串行程是MsSQL自动评估选择的.单个任务分解成多个任务,就可 以在处理器上运行.例如耽搁查询的排序.连接.扫描和 ...

  3. 使用sql语句创建修改SQL Server标识列(即自动增长列)

    一.标识列的定义以及特点SQL Server中的标识列又称标识符列,习惯上又叫自增列.该种列具有以下三种特点:1.列的数据类型为不带小数的数值类型2.在进行插入(Insert)操作时,该列的值是由系统 ...

  4. pl/sql developer 快捷操作: 显示不可见字符 显示历史sql语句 拷贝整个sql窗口的语句至新的sql窗口

    pl/sql developer 快捷操作: 显示不可见字符 显示历史sql语句 拷贝整个sql窗口的语句至新的sql窗口 显示不可见字符:可以把空格.回车显示出来: 显示历史sql语句:ctrl+e ...

  5. SQL语句、PL/SQL块和SQL*Plus命令之间的区别

    SQL语句.PL/SQL块和SQL*Plus命令之间的区别   原文链接:https://blog.csdn.net/liuzhushiqiang/article/details/12320941 在 ...

  6. MySQL多表查询,Navicat使用,pymysql模块,sql注入问题

    一.多表查询 #建表 create table dep( id int, name varchar(20) ); create table emp( id int primary key auto_i ...

  7. day40:python操作mysql:pymysql模块&SQL注入攻击

    目录 part1:用python连接mysql 1.用python连接mysql的基本语法 2.用python 创建&删除表 3.用python操作事务处理 part2:sql注入攻击 1.s ...

  8. 转:查看sql语句执行时间/测试sql语句性能

    原文出处:http://www.cnblogs.com/qanholas/archive/2011/05/06/2038543.html 写程序的人,往往需要分析所写的SQL语句是否已经优化过了,服务 ...

  9. 使用Hibernate 拦截执行sql语句,并输出sql语句,获取sql语句

    重建包名 org.hibernate.type.descriptor.sql 重建类BasicBinder 代码如下 package org.hibernate.type.descriptor.sql ...

  10. 查看sql语句执行时间/测试sql语句性能

    写程序的人,往往需要分析所写的SQL语句是否已经优化过了,服务器的响应时间有多快,这个时候就需要用到SQL的STATISTICS状态值来查看了. 通过设置STATISTICS我们可以查看执行SQL时的 ...

随机推荐

  1. nginx禁止限制某个IP地址或网段访问服务器

    nginx配置访问ip需要修改nginx.conf文件,只需要在server中添加allow跟deny的ip即可,如下: upstream novel { server ; } server { li ...

  2. Safari 导航栏

    目录 引子 隐藏 Safari 导航栏 显示 Safari 导航栏 iPhone 系统占比 参考资料 引子 最近在 iPhone 的 Safari 查看 h5 页面时,发现有些平台的页面向下滚动时,顶 ...

  3. Vue - 自定义组件双向绑定

    前言 无论在任何的语言或框架中,我们都提倡代码的复用性.对于Vue来说也是如此,相同的代码逻辑会被封装成组件,除了复用之外,更重要的是统一管理提高开发效率.我真就接手过一个项目,多个页面都会用到的列表 ...

  4. jvm(1):内存结构

    JVM内存结构 JVM内存的运行时数据区: 线程私有(在线程启动时创建) 程序计数器Program Counter Register 一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器, ...

  5. Educational Codeforces Round 76 D

    这次的ABC三道题非常水,但是我就卡在这个D题上了QAQ 当时大概猜到了贪心,但是没有思路,后来看了一些题解才明白到底是什么意思 首先,假设我们已经处理好了前面的monsters,对于第i个monst ...

  6. 文件操作_python

    一.基础文件操作读写 1.建立文件对象两种建立对象方式: f=open('文件1','r',encoding='utf8') with open('文件1','r',encoding='utf8') ...

  7. kruskal算法生成最小生成树

    kurskal算法更适合稀疏图 kruskal算法伪代码: int kruskal(){ 令最小生成树的边权之和为ans, 最小生成树的当前边数为Num_Edge; 将所有边按边权从小到大排序; fo ...

  8. 算法_hdoj_1003

    question: Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  9. [lua]紫猫lua教程-命令宝典-L1-01-12. 临时补充2

    1.lua的环境变量和函数 (1)_G表  (个人习惯遍历下_G 看看当前环境支持什么库 很多库不是默认就支持的 需要按照流程导入或者加载) 一个全局变量(非函数),内部储存有当前所有的全局函数和全局 ...

  10. FFmpeg—— Bitstream Filters 作用

    原文链接: https://stackoverflow.com/questions/32028437/what-are-bitstream-filters-in-ffmpeg Let me expla ...