2 sqlite3简单使用 sqlite3模块是由Gerhard Häring写的,它提供了与PEP 249所描述的db-api 2.0规范兼容的SQL接口。...,并且在后续的会话中可用(我是用的win10 + pycharm环境),可以下载一个数据库工具navicat premium来查看test.db文件的内容,安装软件网上很好搜,不讲解,我把连接数据库操作截图说明...通常,您的SQL操作需要使用来自Python变量的值。您不应该使用Python的字符串操作来组装您的查询,因为这样做是不安全的,它使您的程序容易受到SQL注入***。相反,使用DB-api的参数替换。...您可以使用“:memory:”打开数据库连接到存储在RAM中的数据库,而不是在磁盘上。当一个数据库被多个连接访问,其中一个进程修改数据库时,SQLite数据库将被锁定,直到事务被提交。...如果两个行对象有相同的列,并且它们的成员是相等的,那么它们就比较相等。 Row.keys() 该方法返回一个列名称列表。在查询之后,它是每个元组中的第一个成员。
FROM ; 查询出表中的所有列 SELECT * FROM ; 根据WHERE语句来选择记录 SELECT ,......希望选取不是NULL时,需要在条件表达式中使用IS NOT NULL运算符。 NOT 运算符用来否定某一条件,但是不能滥用 多个查询条件进行组合时,需要使用AND运算符或者OR运算符。...SQL常用规则5 表中存储的是实际数据,而视图中保存的是从表中提取数据所使用的SELECT语句 应该将经常使用的SELECT语句做成视图 定义视图时不要使用ORDER BY子句 视图和表需要同时进行更新...,因此通过汇总得到的视图无法进行更新 子查询作为内层查询会首先执行 标量字查询就是返回单一值的子查询 在细分的组内进行比较时,需要使用关联子查询 ABS函数(求绝对值) ABS(数值) MOD函数(求余...ELSE END SQL常用规则6 谓词就是返回值为真值的函数 通常指定关联子查询作为EXIST的参数 作为EXIST参数的子查询中经常会使用SELECT * CASE表达式中的END不能省略
] select distinct 列名 from 表名; -- 查询并临时修改列名:(关键字:as) select 列名 as '临时列名' from 表名; -- 查询时进行数据运算:(该列中的内容值全部加...表名; -- 注意:列的类型:汉字不能求和;若有汉字,按0计算,对不是数据类型的数据,计0运算. -- 可以与条件查询结合↓ (查询列2中所有包含'张三'的字段,并求出其中所有列1的值的和). select...-- $分组查询(关键字:group by) -- 跟随聚合函数使用:group by(被分组的列名); -- select查询时,被分组的列要出现在select选择列后面; -- ↓按照列2的相同内容对列...是在分组后对数据进行过滤 -- where 是在分组前对数据进行过滤 -- 在之前的例子中:我们要对已经得到的数据再进行一个筛选: -- 比如说在得到的数据中,我们只需要列1大于18的所有值,这是在代码后再加一个...(str, from_str, to_str):在源字符串str中查找所有的子串form_str(大小写敏感), -- 找到后使用替代字符串to_str替换它。
尽量减少对数据库的访问次数,且不能查询无用的数据,浪费效能(例如:我只要男生的数据,你把所有人的数据都查询出来)。 2....属于SQL语法的要使用大写 (SELECT, WHERE, INSERT etc…)。 3. 属于使用者自己定义的要使用小写(表名、列名 etc…)。 4....禁止使用 Oracle Trigger。 7. 禁止使用 SELECT * (为了加强代码可读性)。 8. 不能将查询数据库的 SQL 放在循环中查询。...FROM ; 查询表中某个数据 SELECT FROM ; 查询表中指定多个数据 SELECT ,,,......FROM ; 总结 如需要找到符合条件的一些表可以去查询information_schema中的信息,例如:SELECT * FROM information_schema.TABLES
开发规则: 尽量减少对数据库的访问次数,且不能查询无用的数据,浪费效能(例如:我只要男生的数据,你把所有人的数据都查询出来)。...属于SQL语法的要使用大写 (SELECT, WHERE, INSERT etc…)。 属于使用者自己定义的要使用小写(表名、列名 etc…)。...禁止使用 Oracle Trigger。 禁止使用 SELECT * (为了加强代码可读性)。 不能将查询数据库的 SQL 放在循环中查询。...FROM ; 查询表中某个数据 SELECT FROM ; 查询表中指定多个数据 SELECT ,,,......,替换后的字符串) REPLACE 函数(字符串的替换) SUBSTRING (对象字符串,截取的起始位置,截取的字符数) SUBSTRING 函数(字符串的截取) CURRENT_DATE CURRENT_DATE
id=1%2B1 # "+"在URL中是被当做URL去执行的 # 这里想输入"+"用"%2B"替换 # 输入一个不成立的条件,看看页面的回显是否存在异常 测试传入的参数是否被当做代码去执行 测试传入的参数是否被当做代码去执行...测试传入的参数是否被当做代码去执行 这里URL编码测试可以在在线转换 URL编码 image.png order by # 排序,用来查看字段数 union select # 联合查询,用来查询自己想要的得到数据...union select id,password from test # 这样查询出来的结果顺序是先显示第一个表中的内容,再显示第二个表中的内容 select * from admin union select...id=1.1 union selct id,database() # 回显不是database()而是其他字符串,可以判断得到了库名 5.判断表名 mysql5.0版本以上 URL/?...id=1.2 union select 1,password from admin # 在知道了表名和列名就可以直接指定表查询 # 真实环境中还是有很多情况,靶场也会有很多坑,还是自己多做测试 8.靶场练习
场景:需要将从ODPS数仓中计算得到的大额可疑交易信息导入到业务系统的mysql中供业务系统审核。...JDBC大家都会使用上面的方式进行开发,但是如果我们的表的字段有50个,而且查询不能使用 select * from 必须指定列名呢?...添加数据不能使用insert into intsmaze values()必须指定插入的列名呢?你干脆杀了我吧。...语句,完成字段列名映射 根据javabean自动生成insert,select语句,完成字段列名映射 当初开发时,一看到这么多字段映射我烦躁不安,然后花了半天用反射把代码重新编写了下,后面有新的表要进行同步时...,用一个工具类生成javabean的java文件,然后直接就在下面模板代码中替换javabean类就完成了数据同步,整个操作10分钟搞定,是不是很爽。
注:修改多个列的值时用逗号隔开。要想设置某一列的值为空,只需让=NULL 即可。WHERE表示过滤条件。...查询操作 分类: –投影操作 指定查询结果中能显示哪些列 –选择操作 指定哪些行出现在结果中 –排序操作 指定查询的结果以什么样的顺序显示 投影操作: SELECT 列1,列2 FROM 表名...现在只想要查看姓名和年龄列: SELECT student_name,student_age FROM t_student; ? 注意这里不是把其他列删除了,而是只显示我们想看见的部分。...这下模糊查询就很明白了吧,当然还有其他组合,大家可以自己尝试。 处理空值数据: 判断条件不能用列名=NULL,而是要用IS NULL或IS NOT NULL。...标准写法: SELECT * FROM t_student WHERE 性别 IS NULL 排序操作——ORDER BY: 使用ORDER BY时,列名上指定ASC或DESC。
使用IO流的技术将数据保存到本地文件中 但是接下来我有这样一个需求:将下面的user.txt文件中的王五年龄修改为35 张三 23 男 李四 24 男 王五 25 女 赵六 26 女 周七 27 男 我们要如何实现呢...查询当前正在使用的数据库名称 -- 查询当前正在使用的数据库 SELECT DATABASE(); 使用数据库 -- 标准语法 USE 数据库名称; -- 使用db4数据库 USE db4; 4.DDL...; 如果某一列为null,可以进行替换 ifnull(表达式1,表达式2) 表达式1:想替换的列 表达式2:想替换的值 */ -- 查询商品名称和库存,库存数量在原有基础上加10 SELECT...非,不是 条件查询语法 -- 标准语法 SELECT 列名 FROM 表名 WHERE 条件; -- 查询库存大于20的商品信息 SELECT * FROM product WHERE stock...查询名称中包含手机的商品信息。
查询使用说明 1. queryForMap queryForMap,一般用于查询单条数据,然后将db中查询的字段,填充到map中,key为列名,value为值 a....占位符替换 正是因为直接拼sql,可能到只sql注入的问题,所以更推荐的写法是通过占位符 + 传参的方式 // 使用占位符替换方式查询 sql = "select * from money where...占位符替换 直接使用sql的查询方式,依然和前面一样,可能有注入问题,当然优先推荐的使用通过占位来传参方式 String sql2 = "select id, `name`, money, is_deleted...高级使用 当sql返回的列名和POJO的属性名可以完全匹配上的话,上面的这种写法就显得非常冗余和麻烦了,我需要更优雅简洁的使用姿势,最好就是直接传入POJO类型,自动实现转换 如果希望得到这个效果,你需要的就是下面这个了...,直接传入POJO的类型进去,是不是就可以得到我们预期的结果了?
通过页面的返回已经提示这里是数字型注入,那么可以猜测其后端逻辑大致如下 select 用户名,用户邮箱 from 表名 where 列名=1 所以可以直接构造Payload得到数据。...# 查询全部库,可以看得库名Pikachu x' union select 1,schema_name from information_schema.schemata # 查询Pikachu库中的全部表名...table_schema="pikachu" # 查询Pikachu库users表中的全部列名:id,username,password,level x' union select 1,column_name...思路:在MySQL中使用一些指定的函数来制造报错,从而从报错信息中获取设定的信息。...,表中字段名 XPath_String,XPath格式的字符串 New_Value,替换的值 此函数的作用是改变(查找并替换)XML文档中符合条件的节点的值。
希望选取不是NULL时,需要在条件表达式中使用IS NOT NULL运算符。 NOT 运算符用来否定某一条件,但是不能滥用 多个查询条件进行组合时,需要使用AND运算符或者OR运算符。...的形式表现出来 使用GROUP BY 子句时,SELECT子句中不能出现聚合键之外的列名 在GROUP BY子句中不能使用SELECT子句中定义的别名 只有在SELECT子句、ORDER BY子句和HAVING...定义视图时不要使用ORDER BY子句 视图和表需要同时进行更新,因此通过汇总得到的视图无法进行更新 子查询作为内层查询会首先执行 标量字查询就是返回单一值的子查询 在细分的组内进行比较时,需要使用关联子查询...EXIST参数的子查询中经常会使用SELECT * CASE表达式中的END不能省略 SQL常用规则7 集合运算会除去重复的记录,但可以使用ALL选项,保留重复行 进行联结时需要在FROM子句中使用多张表...进行内联结时必须使用ON子句,并且要书写在FROM 和WHERE之间 使用联结时SELECT子句中的列需要按照“.”的格式进行书写 外联结使用LEFT、RIGHT来指定主表,使用两者所得到的结果完全相同
在多表连查中,如果两个列名字一样,最好用别名分开: SELECT winery.name AS wname, region.name AS rname, FROM winery, region WHERE...winery.region_id = region.region_id; 列名的引用为:$row["wname"] 和 $row["rname"] 在指定表名和列名的情况下,只引用列名: SELECT...你可以很容易的用 date 函数来得到这种格式的当前系统时 间: date("Y-m-d") 并且,在 DATA 数据类型之间可以作减法,得到相差的时间天数: $age = ($current_date...在某些时候,这种区别会造成一些 意想不到的后果。就我的经验而言,任何字段都应该声明为 NOT NULL 。这样许多的SELECT 查询语句就能够正常运转了。...这也算是 MySQL 的一个 Bug 吧,所以在这种情况 下,使用 SELECT 查询要特别的小心。
但是呢,在SQL语句当中,有一种查询是比较特殊的,就是聚合函数查询,它不像传统查询一样是将表中的某些列的数据查询出来,而是将查询结果进行聚合和统计,最终将统计后的结果进行返回。...但是在select语句当中我们通常不会再去指定列名,而是将需要统计的列名传入到聚合函数当中,那么执行select语句使用的还是SQLiteDatabase中的rawQuery()方法。...count()函数替换成了sum()函数。...它们一个是求出某一列中的最大值,一个是求出某一列中的最小值,仅此而已。 现在我们已经将LitePal中所有聚合函数的用法全部都学习完了,怎么样,是不是感觉非常的简单?...后面我仍然会继续分享更多Android技术相关的其它文章,感谢大家对本专栏的持续关注。
SELECT Sname, Ssex FROM Student WHERE Sdept IN ('CS','MA’,'IS' ); 【1】查询既不是计算机科学系、数学系,也不是信息系的学生的姓名和性别... 说明: 连接字段:连接谓词中的列名称 连接条件中的各连接字段类型必须是可比的,但名字不必相同 2.1 等值与非等值连接查询 等值连接:连接运算符为= 【1】查询每个学生及其选修课程的情况...Cno= ' 2 '); 说明: 上层的查询块称为外层查询或父查询,下层查询块称为内层查询或子查询 SQL语言允许多层嵌套查询【即一个子查询中还可以嵌套其他子查询】 子查询的限制,不能使用ORDER...使用ANY或ALL谓词时必须同时使用比较运算 语义为: > ANY 大于子查询结果中的某个值 > ALL 大于子查询结果中的所有值 < ANY 小于子查询结果中的某个值...谓词的子查询不能被其他形式的子查询等价替换 所有带IN谓词、比较运算符、ANY和ALL谓词的子查询都能用带EXISTS谓词的子查询等价替换 用EXISTS/NOT EXISTS实现全称量词(难点)
最近的工作中,我听到组内两名研发同学在交流数据统计性能的时候,说到以下内容: 你怎么能用 count(*) 统计数据呢,count(*) 太慢了,要是把数据库搞垮了那不就完了么,用 count(1),这样比较快...但要是在后面加了where查询条件时,统计总数也没有像想象中那么快了。 InnoDB 引擎:执行 count(*),需要将数据一行一行地读,再统计总数。...官方文档说是在40%到50%,所以此行数 rows 是不能直接使用的,如下所示: 查询性能大PK 基于MySQL的Innodb存储引擎,统计表的总记录数下面这4种做法,哪种效率最高?...count(*) 需要注意的是,并不是带了 * 就把所有值取出来,而是 MySQL 做了专门的优化,count(*) 肯定不是null,按行累加。...(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null 的计数,即某个字段值为null 时,不统计。
count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。...执行效率上: 列名为主键,count(列名)会比count(1)快 (待商榷) 列名不为主键,count(1)会比count(列名)快 (确定) 如果表多个列并且没有主键,则 count(1) 的执行效率优于...---------+ | 10000000 | +----------+ 1 row in set 验证执行效率 执行时间 分析一下 执行计划,然后看下执行时间, 无条件查询情况下 可以得到结论 count...对于MyISAM表,如果SELECT从一个表中检索,没有检索其他列,也没有WHERE子句,那么COUNT(*)被优化为快速返回。...这种优化只适用于MyISAM表,因为这个存储引擎存储了准确的行数,并且可以非常快速地访问。COUNT(1)只有在第一列被定义为NOT NULL时才进行与COUNT(*)相同的优化
映射文件 配置文件和映射文件还有挺多的属性我还没有讲的,现在就把它们一一补全 在mapper.xml文件中配置很多的sql语句,执行每个sql语句时,封装为MappedStatement对象,mapper.xml...Mybatis会自动帮我们把返回的结果进行封装成JavaBean 那当我们数据表的字段和JavaBean的属性名称不是相同时,我们就需要使用resultMap,也就是上面那段代码 当然了,在正常情况下列名和...如果sql查询列名和最终要映射的pojo的属性名不一致,使用resultMap将列名和pojo的属性名做一个对应关系 (列名和属性名映射配置) 使用resultMap <resultMap id...场合: 常见一些明细记录的展示,将关联查询信息全部展示在页面时,此时可直接使用resultType将每一条记录映射到pojo中,在前端页面遍历list(list中是pojo)即可。...如果查询单表就可以满足需求,一开始先查询单表,当需要关联信息时,再关联查询,当需要关联信息再查询这个叫延迟加载。 在Mybatis中延迟加载就是在resultMap中配置具体的延迟加载.. ?
一、聚合查询 (一)聚合函数 函数与括号之间不能有空格 1、count 查询到的数据的数量,null不会计入结果 select count(列名) from 表名; 同时,也可以使用全列查询: select...count(*) from 表名; 2、sum 查询到的数据的总和,null不会计入结果、不是数字没有意义,不能进行全列查询 select sum(列名) from 表名; 3、avg 查询到的数据的平均值...,不是数字没有意义,不能进行全列查询 select avg(列名) from 表名; 4、max 查询到的数据的最大值,不是数字没有意义,不能进行全列查询 select max(列名) from 表名;...5、min 查询到的数据的最小值,不是数字没有意义,不能进行全列查询 select min(列名) from 表名; 二、分组查询 (一)group by 指定一个列,把列里面相同的值分为一组进行查询...(个数、类型) insert into 表1(列名,列名..) select 列名,列名.. from 表2; 将表2中的数据复制到表1当中。
可以以任何顺序列出目标列名。 VALUES子句或查询的值都与显式或隐式的列列表从左到右。 如果要添加表中的所有列的值,可能不需要在SQL查询中指定列(次)名称。...可以使用子查询的有SELECT,INSERT,UPDATE和DELETE语句,与运算符如=,,>=,<=,IN等一起使用。有几个子查询必须遵循的规则: 必须用括号括起来的子查询。...子查询只能有一个在SELECT子句中的列,除非多列在主查询的查询来比较其选定的列。 ORDER BY不能使用在子查询中,虽然主查询就可以使用ORDER BY。...EXISTS内部有一个子查询语句(SELECT … FROM…),我将其称为EXIST的内查询语句。其内查询语句返回一个结果集。EXISTS子句根据其内查询语句的结果集空或者非空,返回一个布尔值。...它常用于在显示数据时用缺省值替换NULL。语法如下: COALESCE(value [, ...])
领取专属 10元无门槛券
手把手带您无忧上云