SQLite3-触发器
触发器 Trigger概念SQLite 触发器(Trigger)是数据库的回调函数,它会在指定的数据库事件发生时自动执行/调用。以下是关于 SQLite 的触发器的要点:SQLite 的触发器(Trigger)可以指定在特定的数据库表发生 DELETE、INSERT 或 UPDATE 时触发,或在一个或多个指定表的列发生更新时触发。SQLite 只支持 FOR EACH ROW(行级触发器)触发器,没有 FOR EACH STATEMENT(语句级触发器)触发器。因此,明确指定 FOR EACH ROW 是可选的。WHEN 子句和触发器动作可能访问使用表单 NEW.column-name 和 OLD.column-name 的引用插入、删除或更新的行元素,其中 column-name 是从与触发器关联的表的列的名称。如果提供 WHEN 子句,则只针对 WHEN 子句为真的指定行执行 SQL 语句。如果没有提供 WHEN 子句,则针对所有行执行 SQL 语句。BEFORE 或 AFTER 关键字决定何时执行触发器动作,决定是在关联行的插入、修改或删除之前或者之后执行触发器动作。 ...
SQLite3-多表查询
SQLite 的 Join 子句用于结合两个或多个数据库中表的记录。JOIN 是一种通过共同值来结合两个表中字段的手段。SQL 定义了三种主要类型的连接:交叉连接 - CROSS JOIN内连接 - INNER JOIN外连接 - OUTER JOIN
交叉连接 - CROSS JOIN交叉连接(CROSS JOIN)把第一个表的每一行与第二个表的每一行进行匹配。如果两个输入表分别有 x 和 y 行,则结果表有 x*y 行。由于交叉连接(CROSS JOIN)有可能产生非常大的表,使用时必须谨慎,只在适当的时候使用它们。
语法1SELECT ... FROM table1 CROSS JOIN table2 ...
示例1SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT;
内连接 - INNER JOIN内连接(INNER JOIN)根据连接谓词结合两个表(table1 和 table2)的列值来创建一个新的结果表。查询会把 table1 中的每一行与 table2 中的每一行进行比较,找到所有满足连接谓词的行 ...
SQLite3-约束
约束的定义约束是在表的数据列上强制执行的规则,这些是用来限制可以插入到表中的数据类型,这确保了数据库中数据的准确性和可靠性。
约束可以是列级或表级。列级约束仅适用于列,表级约束被应用到整个表。
以下是在 SQLite 中常用的约束。
NOT NULL 约束:确保某列不能有 NULL 值。
DEFAULT 约束:当某列没有指定值时,为该列提供默认值。
UNIQUE 约束:确保某列中的所有值是不同的。
PRIMARY Key 约束:唯一标识数据库表中的各行/记录。
CHECK 约束:CHECK 约束确保某列中的所有值满足一定条件。
NOT NULL约束默认情况下,列可以保存 NULL 值。如果您不想某列有 NULL 值,那么需要在该列上定义此约束,指定在该列上不允许 NULL 值。NULL 与没有数据是不一样的,它代表着未知的数据。
1234567CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT N ...
SQLite3-DQL基本查询
SELECT语句语句定义SQLite 的 SELECT 语句用于从 SQLite 数据库表中获取数据,以结果表的形式返回数据。这些结果表也被称为结果集。
代码示例语法如下:
1SELECT column1, column2, columnN FROM table_name;
1)查询某些列的内容
1sqlite> SELECT ID, NAME, SALARY FROM COMPANY;
2)查询全部列的内容
1SELECT * FROM COMPANY;
LIKE语句语句定义SQLite 的 LIKE 运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,LIKE 运算符将返回真(true),也就是 1。这里有两个通配符与 LIKE 运算符一起使用:百分号 (%)下划线 (_)百分号(%)代表零个、一个或多个数字或字符。下划线(_)代表一个单一的数字或字符。这些符号可以被组合使用。
代码示例AGE以2开头:
1sqlite> SELECT * FROM COMPANY WHERE AGE LIKE '2%';
COMPANY ...
SQLite3-DML语句基本使用
INSERT 语句-插入数据语句定义SQLite 的 INSERT INTO 语句用于向数据库的某个表中添加新的数据行。
代码示例语法如下:
12INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]VALUES (value1, value2, value3,...valueN);
如果不指定列名则按列的顺序给数据赋值。可以通过在一个有一组字段的表上使用 select 语句,填充数据到另一个表中。下面是语法:
1234INSERT INTO first_table_name [(column1, column2, ... columnN)] SELECT column1, column2, ...columnN FROM second_table_name [WHERE condition];
UPDATE 语句-修改数据语句定义SQLite 的 UPDATE 查询用于修改表中已有的记录。可以使用带有 WHERE 子句的 UPDATE 查询来更新选定行,否则所有的行都会被更新。
代码示例语法如下: ...
SQLite3-DDL语句基本使用
数据库操作创建数据库创建数据库可以在命令行中使用以下命令:1)创建数据库
1$ sqlite3 DatabaseName.db
2)使用.open 命令,有则打开无则创建并打开
1sqlite>.open test.db
.dump 导出数据库你可以使用.dump 命令将一个数据库完全导出到一个文本文件:
1$sqlite3 testDB.db .dump > testDB.sql
上面的命令将转换整个 testDB.db 数据库的内容到 SQLite 的语句中,并将其转储到 ASCII 文本文件 testDB.sql 中。您可以通过简单的方式从生成的 testDB.sql 恢复,如下所示:
1$sqlite3 testDB.db < testDB.sql
ATTACH 语句-附加数据库假设这样一种情况,当在同一时间有多个数据库可用,您想使用其中的任何一个。SQLite 的 ATTACH DATABASE 语句是用来选择一个特定的数据库,使用该命令后,所有的 SQLite 语句将在附加的数据库下执行。如果数据库尚未被创建,上面的命令将创建一个数据库,如果数据库 ...
SQLite3-基本操作
SQLite 的特点SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是一个增长最快的数据库引擎,这是在普及方面的增长,与它的尺寸大小无关。SQLite 源代码不受版权限制。SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。SQLite 不需要一个单独的服务器进程或操作的系统(无服务器的)。SQLite 不需要配置,这意味着不需要安装或管理。一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于 250KiB。SQLite 是自给自足的,这意味着不需要任何外部的依赖。SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。SQLite 可在 UNIX(Linux, Mac OS-X, Android, ...
Python-网络请求
requests 模块基本理论Python requests 是一个常用的 HTTP 请求库,可以方便地向网站发送 HTTP 请求,并获取响应结果。requests 模块比 urllib 模块更简洁。如同 JavaScript 的 AJAX 与 C#的 HttpClient 一样,requests 模块用于请求网络接口,发送 get、post、put 等 http 请求。
代码示例发送 Get 网络请求:
123456# 导入 requests 包import requests# 发送请求res = requests.get('https://www.baidu.com/')# 返回网页内容print(res.text)
常用方法requests 模块有以下常用方法:
方法
描述
delete(url, args)
发送 DELETE 请求到指定 url
get(url, params, args)
发送 GET 请求到指定 url
head(url, args)
发送 HEAD 请求到指定 url
patch(url, data, arg ...
Python-多线程
多线程多线程的概念与 Python 实现每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。每个线程都有他自己的一组 CPU 寄存器,称为线程的上下文,该上下文反映了线程上次运行该线程的 CPU 寄存器的状态。指令指针和堆栈指针寄存器是线程上下文中两个最重要的寄存器,线程总是在进程得到上下文中运行的,这些地址都用于标志拥有线程的进程地址空间中的内存。线程可以被抢占(中断)。在其他线程正在运行时,线程可以暂时搁置(也称为睡眠) – 这就是线程的退让。线程可以分为:内核线程:由操作系统内核创建和撤销。用户线程:不需要内核支持而在用户程序中实现的线程。Python3 线程中常用的两个模块为:_threadthreading(推荐使用)thread 模块已被废弃。用户可以使用 threading 模块代替。所以,在 Python3 中不能再使用”thread” 模块。为了兼容性,Python3 将 thread 重命名为 “_thread”。
_thread 模块_thread 提供了低级别的、原始的线程以 ...
Python-面向对象
类 class定义一个类使用 class 关键字定义一个类。
12345678class People: name=None age=None def eat(self): print("吃东西")p = People() # 实例化p.eat()
构造函数众所周知,js 的构造函数是 constructor,c#的构造函数是与类名同名的不带返回值的方法。而在 python 中构造函数是__init__()。
1234class People: def __init__(self,a,b): self.a=a self.b=b
注意实例化的时候要给构造函数传参。
self类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。有点类似 js 和 c#的 this。当你定义一个类,并在类中定义方法时,第一个参数通常被命名为 self,尽管你可以使用其他名称,但强烈建议使用 self,以保持代码的一致性和可读性。
类的继承基本理论在定义类的时候使用 ...