《Python 与 SQLite:强大的数据库组合》

《Python 与 SQLite:强大的数据库组合》

  • 一、Python 与 SQLite 的结合
  • 二、安装与连接
    • (一)安装 SQLite 模块
    • (二)连接到数据库
  • 三、数据库操作
    • (一)创建表格
    • (二)插入数据
    • (三)查询数据
    • (四)更新和删除数据
  • 四、事务处理与异常处理
    • (一)事务处理
    • (二)异常处理
  • 五、数据库索引与备份恢复
    • (一)创建数据库索引
    • (二)数据库备份和恢复
  • 六、安全性考虑
  • 假设用户的输入
  • 参数化查询
  • 假设用户的输入
  • 进行输入验证和数据清理
  • 参数化查询
  • 七、应用场景
    • (一)小型网站
    • (二)嵌入式设备
    • (三)数据库教学
    • (四)本地应用程序

一、Python 与 SQLite 的结合

Python 作为一种高级编程语言,具有诸多特点与优势。它以其用户友好性著称,语法简洁明了,代码结构清晰,即使是初学者也能快速上手。Python 的代码简洁性使得开发效率极高,开发者可以用较少的代码实现复杂的功能。同时,Python 易于学习和理解,其以空白字符划分代码块的设计,减少了复杂的语法元素,提高了代码的可读性。
SQLite 作为嵌入式关系数据库管理系统,也有其独特的特点与优势。首先,它具有零配置的特点,无需复杂的安装和配置过程,开发人员可以很容易地将其集成到应用程序中。SQLite 高度可靠,其事务处理完全兼容 ACID,能够确保数据的一致性和完整性。而且,SQLite 易于使用,它使用简单的 SQL 语言,即使没有专业的数据库知识也能轻松操作。此外,SQLite 具有跨平台的特性,在各种平台上都能良好运行,为开发者提供了极大的便利。
Python 与 SQLite 的结合具有显著的优势。Python 丰富的第三方库可以与 SQLite 无缝对接,为数据的存储和管理提供了强大的支持。例如,使用 Python 的 sqlite3 库,开发人员可以轻松地与 SQLite 数据库进行交互,实现数据的增删改查等操作。这种结合适用于各种应用场景,无论是小型项目还是大型应用,都能发挥出巨大的作用。

二、安装与连接

(一)安装 SQLite 模块

Python 从 2.5 版本开始自带 sqlite3 模块,这使得在 Python 中操作 SQLite 数据库变得极为方便。对于低版本的 Python,如 Python 2.4 或更早版本,则需要安装 Python SQLite 扩展。安装方法可以使用 easy_install 或 pip 命令进行安装,具体如下:
easy_install pysqlite或者pip install pysqlite。

(二)连接到数据库

在 Python 中,连接到 SQLite 数据库需要使用 sqlite3 模块中的connect()函数。这个函数接受一个参数,即数据库文件的路径。如果指定的数据库文件存在,那么就会连接到这个已存在的数据库;如果文件不存在,connect()函数会自动创建一个新的数据库文件。
例如,以下代码展示了如何连接到一个名为example.db的数据库:

import sqlite3
conn = sqlite3.connect('example.db')

如果使用’:memory:'表示文件名,Python 会创建一个内存数据库。内存数据库中的所有数据均保存在内存中,关闭连接对象时,所有数据自动删除。如下所示:

cn = sqlite3.connect(':memory:')

如果使用空字符串作为文件名,Python 会创建一个临时数据库。临时数据库有一个临时文件,所有数据保存在临时文件中。连接对象关闭时,临时文件和数据也会自动删除。

cn = sqlite3.connect('')

执行完所有操作后,应执行close()方法关闭连接对象,释放占用的资源。

cn.close()

三、数据库操作

(一)创建表格

SQLite 的 CREATE TABLE 语句用于在数据库中创建新表。以下是一个示例,创建一个名为 COMPANY 的表,包含 ID、NAME、AGE、ADDRESS 和 SALARY 字段:
CREATE TABLE COMPANY(ID INT PRIMARY KEY NOT NULL,NAME TEXT NOT NULL,AGE INT NOT NULL,ADDRESS CHAR(50),SALARY REAL
);

在这个例子中,ID 字段被定义为整数类型且为主键,不能为空;NAME 和 AGE 字段也不能为空,分别为文本类型和整数类型;ADDRESS 字段为固定长度为 50 的字符类型,可以为空;SALARY 字段为实数类型,可以为空。
在 Python 中,可以使用 sqlite3 模块的游标对象来执行这个创建表的 SQL 语句。例如:

import sqlite3conn = sqlite3.connect('example.db')
cursor = conn.cursor()cursor.execute('''CREATE TABLE IF NOT EXISTS COMPANY (ID INT PRIMARY KEY NOT NULL,NAME TEXT NOT NULL,AGE INT NOT NULL,ADDRESS CHAR(50),SALARY REAL
)''')conn.commit()
conn.close()

CREATE TABLE IF NOT EXISTS 语句确保只有在表不存在时才会创建表,避免重复创建表导致的错误。

(二)插入数据

插入单条记录:
可以使用 INSERT INTO 语句向表格中插入单条记录。例如:

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES(1,'张三',32,'California',20000.00);

在 Python 中,可以使用游标对象的 execute 方法执行这个插入语句:

import sqlite3conn = sqlite3.connect('example.db')
cursor = conn.cursor()cursor.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES(1,'张三',32,'California',20000.00)")conn.commit()
conn.close()

插入多条记录:
可以使用 executemany 方法一次性插入多条记录。例如:

import sqlite3data = [(2,'李四',33,'New York',25000.00),(3,'王五',34,'London',30000.00)]conn = sqlite3.connect('example.db')
cursor = conn.cursor()sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES(?,?,?,?,?)"
cursor.executemany(sql, data)conn.commit()
conn.close()

(三)查询数据

获取所有记录:
使用 SELECT * FROM 语句可以获取表格中的所有记录。在 Python 中,可以使用游标对象的 fetchall 方法获取所有查询结果。例如:

import sqlite3conn = sqlite3.connect('example.db')
cursor = conn.cursor()cursor.execute("SELECT * FROM COMPANY")
rows = cursor.fetchall()for row in rows:print(row)conn.close()

分页查询:
可以使用 LIMIT 和 OFFSET 关键字实现分页查询。例如,查询前 10 条记录:

SELECT * FROM COMPANY LIMIT 10;

在 Python 中执行这个查询语句并获取结果的方法与获取所有记录类似。

(四)更新和删除数据

更新数据:
使用 UPDATE 语句可以更新表格中的数据。例如,将 ID 为 1 的记录的 SALARY 字段更新为 25000.00:

UPDATE COMPANY set SALARY = 25000.00 where ID = 1;

在 Python 中,可以使用游标对象的 execute 方法执行这个更新语句:

import sqlite3conn = sqlite3.connect('example.db')
cursor = conn.cursor()cursor.execute("UPDATE COMPANY set SALARY = 25000.00 where ID = 1")conn.commit()
conn.close()

删除数据:
使用 DELETE FROM 语句可以删除表格中的数据。例如,删除 ID 为 1 的记录:

DELETE FROM COMPANY where ID = 1;

在 Python 中执行这个删除语句的方法与更新数据类似。如果要删除所有记录,可以使用没有 WHERE 子句的 DELETE FROM 语句:

DELETE FROM COMPANY;

四、事务处理与异常处理

(一)事务处理

事务是一个包括一系列操作的任务,这些操作要么全部成功,要么全部失败。SQLite 中的事务具有原子性、一致性、隔离性和持久性(ACID)特性,确保了数据的可靠性。
原子性意味着事务中的所有操作要么全部成功执行,要么全部不执行。如果在事务执行过程中出现任何错误,事务会回滚到初始状态,就像这些操作从未发生过一样。例如,在一个银行转账的场景中,如果从账户 A 向账户 B 转账的过程中出现问题,那么整个转账操作将被撤销,确保账户 A 和账户 B 的资金状态不会因为部分操作失败而出现不一致。
一致性要求数据库始终处于一致的状态。在事务开始和结束时,数据库必须满足所有的完整性约束。例如,在一个订单处理系统中,如果一个订单的创建涉及多个数据库操作,如插入订单记录、更新库存数量等,那么这些操作必须一起成功执行,以确保数据库的一致性。如果其中任何一个操作失败,事务将回滚,以保持数据库的一致性。
隔离性确保事务之间相互独立,不会互相干扰。每个事务都感觉像是在一个独立的数据库环境中执行,不受其他正在进行的事务的影响。这可以防止数据的不一致性和并发问题。例如,在一个多用户的在线购物系统中,不同用户的购物车操作应该相互隔离,不会因为其他用户的操作而受到影响。
持久性表示一旦事务被提交,其结果就会永久保存。即使系统发生故障,如电源故障或软件崩溃,已提交的事务的结果也不会丢失。这通常通过将数据写入持久存储设备(如硬盘)来实现。
在 Python 中进行事务处理时,可以使用begin_transaction()、commit()和rollback()方法。以下是一个示例代码:

import sqlite3conn = sqlite3.connect('example.db')
cursor = conn.cursor()try:# 开始事务conn.execute('BEGIN TRANSACTION')cursor.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES(4,'赵六',35,'Paris',35000.00)")cursor.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES(5,'孙七',36,'Tokyo',40000.00)")# 提交事务conn.commit()print("事务提交成功")
except sqlite3.Error as e:# 发生错误,回滚事务conn.rollback()print(f"发生错误:{e},事务已回滚")
finally:conn.close()

在这个例子中,首先使用begin_transaction()方法开始一个事务,然后执行两条插入语句。如果这两条插入语句都成功执行,那么使用commit()方法提交事务。如果在执行过程中出现任何错误,将捕获异常并使用rollback()方法回滚事务。
另外,Python 的sqlite3模块还提供了自动事务管理的功能。如果在执行操作后没有显式调用commit(),那么在下一次操作开始时,上一个事务会自动提交。如果在执行操作时发生异常,事务会自动回滚。例如:

import sqlite3conn = sqlite3.connect('example.db')
cursor = conn.cursor()try:cursor.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES(6,'周八',37,'Berlin',45000.00)")# 由于没有显式调用 commit,如果在下一次操作前发生异常,会自动回滚
except sqlite3.Error as e:print(f"发生错误:{e}")
finally:# 关闭连接conn.close()

(二)异常处理

在进行数据库操作时,进行异常处理是非常重要的,它可以防止数据库文件无法创建或打开、SQL 语句执行失败等情况。
如果数据库文件无法创建或打开,可能是由于文件路径错误、权限不足或其他原因导致的。在这种情况下,应该捕获异常并给出相应的错误提示,以便开发者能够及时解决问题。例如:

import sqlite3try:conn = sqlite3.connect('wrong_path/example.db')
except sqlite3.Error as e:print(f"无法打开数据库文件:{e}")如果 SQL 语句执行失败,可能是由于语法错误、数据类型不匹配、约束违规等原因导致的。在这种情况下,也应该捕获异常并给出相应的错误提示,以便开发者能够定位问题并进行修复。例如:
import sqlite3conn = sqlite3.connect('example.db')
cursor = conn.cursor()try:cursor.execute("SELECT * FROM non_existent_table")
except sqlite3.DatabaseError as e:print(f"数据库错误:{e}")
finally:conn.close()

在实际应用中,可以根据具体的异常类型进行不同的处理。例如,如果是语法错误,可以提示开发者检查 SQL 语句的语法;如果是约束违规,可以提示开发者检查数据的完整性。通过合理的异常处理,可以提高程序的稳定性和可靠性,避免因为数据库操作失败而导致程序崩溃。

五、数据库索引与备份恢复

(一)创建数据库索引

索引是数据库中用于加速数据检索的重要组成部分。在 SQLite 中,创建索引可以显著提高查询性能。例如,在一个包含大量数据的表格中,如果经常需要根据某个字段进行查询,那么在该字段上创建索引可以大大加快查询速度。
在 Python 中,可以使用 sqlite3 模块的游标对象执行 CREATE INDEX 语句来创建索引。以下是一个示例代码,在名为 COMPANY 的表格的 NAME 字段上创建索引:

import sqlite3conn = sqlite3.connect('example.db')
cursor = conn.cursor()cursor.execute("CREATE INDEX IF NOT EXISTS idx_name ON COMPANY (NAME)")conn.commit()
conn.close()

这里使用了 CREATE INDEX IF NOT EXISTS 语句,确保只有在索引不存在时才会创建索引,避免重复创建索引导致的错误。
创建索引需要注意一些事项。首先,索引会占用额外的存储空间,因此在创建索引时需要权衡查询性能和存储空间的需求。其次,索引的创建和维护会增加数据库的写入操作的时间,因为每次插入、更新或删除数据时,都需要更新索引。因此,在频繁进行写入操作的场景下,需要谨慎考虑是否创建索引。

(二)数据库备份和恢复

定期备份数据库以防止数据丢失是一个非常重要的操作。SQLite 数据库虽然相对较小且易于管理,但也可能会因为硬件故障、软件错误或人为操作失误而导致数据丢失。因此,定期备份数据库可以确保在发生意外情况时能够快速恢复数据。
备份的重要性
防止数据丢失:硬件故障、软件错误、人为操作失误等都可能导致数据库中的数据丢失。定期备份可以在这些情况发生时,快速恢复数据,减少损失。
数据恢复:如果数据库出现损坏或数据被误删除,可以使用备份文件进行恢复。备份文件可以作为数据库的一个副本,在需要时进行恢复操作。
历史数据保存:备份文件可以作为历史数据的保存,方便进行数据分析和审计。
备份方法
复制数据库文件:这是一种简单的备份方法。可以使用 Python 的 shutil 模块复制数据库文件。例如:

    import shutilsrc_db = 'example.db'backup_db = 'example_backup.db'shutil.copy(src_db, backup_db)

使用 SQLite 的备份命令:SQLite 提供了一些备份命令,可以用于备份数据库。例如,可以使用 .backup 命令在 SQLite 命令行中进行备份:

    sqlite>.backup example_backup.db example.db

这里将 example.db 备份到 example_backup.db。
恢复方法
如果使用复制数据库文件的方法进行备份,可以在需要恢复时,将备份文件复制回原始位置。例如:

    import shutilbackup_db = 'example_backup.db'src_db = 'example.db'shutil.copy(backup_db, src_db)

如果使用 SQLite 的备份命令进行备份,可以使用 .restore 命令进行恢复:

    sqlite>.restore example.db example_backup.db

这里将 example_backup.db 恢复到 example.db。
在实际应用中,可以根据具体情况选择合适的备份和恢复方法。同时,为了确保备份的有效性,建议定期测试备份文件的可恢复性,以确保在需要时能够成功恢复数据。

六、安全性考虑

在使用 Python 和 SQLite 进行数据库操作时,安全性是至关重要的。特别是在将用户提供的数据插入到数据库之前,必须进行输入验证和数据清理,以防止 SQL 注入攻击。
SQL 注入攻击是一种常见的安全漏洞,攻击者通过将恶意 SQL 代码嵌入到用户输入中,试图控制数据库查询或命令。例如,如果一个应用程序直接将用户输入的字符串拼接在 SQL 语句中,攻击者就可以输入恶意的 SQL 代码,从而获取、修改或删除数据库中的数据。
为了防止 SQL 注入攻击,可以使用参数化查询。参数化查询是一种编程技术,它将 SQL 命令的结构和数据分开处理。在 Python 的 sqlite3 模块中,可以通过使用占位符 ? 来实现参数化查询。例如:

import sqlite3

假设用户的输入

user_supplied_name = 'John'
user_supplied_age = 30

参数化查询

conn = sqlite3.connect('example.db')
cursor = conn.cursor()
cursor.execute("INSERT INTO COMPANY (NAME, AGE) VALUES (?,?)", (user_supplied_name, user_supplied_age))conn.commit()
conn.close()

在这个例子中,? 是一个占位符,用于在执行时被真实的参数值替换。这种方式保护了程序免受 SQL 注入攻击,因为即使用户的输入中包含了 SQL 代码片段,它们也会被数据库视为普通数据而不是可执行的 SQL 代码。
除了参数化查询,还可以进行输入验证和数据清理。输入验证可以确保用户输入的数据符合预期的格式和范围。例如,可以检查用户输入的字符串长度是否在合理范围内,数字是否在合法的数值范围内等。数据清理可以去除用户输入中的潜在危险字符,如单引号、双引号等。
以下是一个进行输入验证和数据清理的示例代码:

import sqlite3def validate_input(name, age):# 输入验证if not isinstance(name, str) or len(name) < 2:raise ValueError('Name must be a string of at least 2 characters.')if not isinstance(age, int) or age < 0:raise ValueError('Age must be a positive integer.')# 数据清理cleaned_name = name.replace("'", "").replace('"', '')return cleaned_name, age

假设用户的输入

user_supplied_name = 'John'
user_supplied_age = 30

进行输入验证和数据清理

cleaned_name, cleaned_age = validate_input(user_supplied_name, user_supplied_age)

参数化查询

conn = sqlite3.connect('example.db')
cursor = conn.cursor()
cursor.execute("INSERT INTO COMPANY (NAME, AGE) VALUES (?,?)", (cleaned_name, cleaned_age))conn.commit()
conn.close()

在这个例子中,validate_input 函数进行了输入验证和数据清理。如果输入不符合要求,函数会抛出一个 ValueError 异常。在实际应用中,可以根据具体的需求进行更复杂的输入验证和数据清理。
总之,在将用户提供的数据插入到数据库之前,进行输入验证和数据清理,以及使用参数化查询是防止 SQL 注入攻击的重要措施。这些措施可以提高应用程序的安全性,保护数据库中的数据不被恶意攻击。

七、应用场景

(一)小型网站

SQLite 适用于中小规模流量的网站。对于大多数中小型流量的网站(也就是大多数网站),每天点击量少于 10 万的网站都可以正常运行。这是一个保守的估计,SQLite 已经被证明可以处理 10 倍以上的流量。例如,一些个人博客、小型企业网站等,数据量相对较小,访问量也不高,使用 SQLite 作为数据库可以满足需求。它无需独立的服务器进程,安装和配置简单,能够快速搭建起网站的数据库系统。同时,Python 与 SQLite 的结合使得开发更加高效,开发者可以利用 Python 的强大功能进行网站的开发和数据管理。

(二)嵌入式设备

SQLite 适用于手机、PDA、机顶盒、以及其他嵌入式设备。作为一个嵌入式数据库它也能够很好的应用于客户端程序。在嵌入式设备中,资源通常有限,而 SQLite 的轻量级特性使其成为理想的选择。它完全包含在一个文件中,不需要独立的服务器进程,占用资源少。例如,在智能手机应用中,使用 SQLite 可以存储用户的设置、应用数据等。Python 可以与 SQLite 一起在嵌入式设备上进行开发,为应用提供数据存储和管理功能。

(三)数据库教学

SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能,非常适合用于数据库教学。学生可以通过使用 Python 与 SQLite 来学习数据库的基本操作,如创建表、插入数据、查询数据、更新数据和删除数据等。由于 SQLite 的简单性和易用性,学生可以快速上手,理解数据库的基本概念和操作。同时,Python 的简洁语法和丰富的库也为教学提供了便利,可以帮助学生更好地理解和实践数据库操作。

(四)本地应用程序

其单一磁盘文件的特性,并且不支持远程连接,使其适用于本地的应用程序,如 PC 客户端软件。在本地应用程序中,数据通常只需要在本地存储和管理,不需要远程访问。SQLite 的这种特性使得它非常适合用于本地应用程序。例如,一些桌面应用程序,如文本编辑器、图像编辑软件等,可以使用 SQLite 来存储用户的设置、历史记录等数据。Python 可以与 SQLite 结合,为本地应用程序提供强大的数据存储和管理功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/468388.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Ubuntu24.04】从双系统到虚拟机再到单系统的故事

故事 在大学前期&#xff0c;我使用Ubuntu系统都是为了学习一些命令或者其它Linux的东西&#xff0c;对性能的要求不高&#xff0c;所以选择了虚拟机&#xff0c;后来为了做毕设&#xff0c;选择安装了Ubuntu20.04双系统&#xff0c;因为虚拟机实在带不动&#xff0c;那时我的主…

初次体验Tauri和Sycamore(1)

原创作者&#xff1a;庄晓立&#xff08;LIIGO&#xff09; 原创时间&#xff1a;2024年11月10日 原创链接&#xff1a;https://blog.csdn.net/liigo/article/details/143666827 版权所有&#xff0c;转载请注明出处。 前言 Tauri 2.0发布于2024年10月2日&#xff0c;Sycamore…

【统计子矩阵——部分前缀和+双指针】

题目 代码 #include <bits/stdc.h> using namespace std; typedef long long ll; const int N 510; int s[N][N]; int main() {ios::sync_with_stdio(0);cin.tie(0);int n, m, k;cin >> n >> m >> k;for(int i 1; i < n; i)for(int j 1; j <…

「QT」QT5程序设计专栏目录

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

Qt学习笔记第41到50讲

第41讲 UI美化遗留问题解决 如上图所示目前记事本的雏形已现&#xff0c;但是还是有待优化&#xff0c;比如右下角的拖动问题。 解决方法&#xff1a; ①首先修改了Widget类的构造函数。 Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) {ui->s…

深度学习经典模型之ZFNet

1 ZFNet 1.1 模型介绍 ​ ZFNet是由 M a t t h e w Matthew Matthew D . Z e i l e r D. Zeiler D.Zeiler和 R o b Rob Rob F e r g u s Fergus Fergus在AlexNet基础上提出的大型卷积网络&#xff0c;在2013年ILSVRC图像分类竞赛中以11.19%的错误率获得冠军&#xff08;实际…

移动应用开发:简易登录页

文章目录 简介一&#xff0c;创建新活动二&#xff0c;设计UI布局三&#xff0c;编写活动代码四&#xff0c;运行应用程序注意 简介 使用Android Studio编写的简单Android 登录应用程序&#xff0c;该应用程序包含一个登录界面&#xff0c;具有账号和密码两个文本框&#xff0…

网络基础:http协议和内外网划分

声明 学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频https://space.bilibili.com/350329294 一&#xff0c;H…

英飞凌Aurix2G TC3XX GPT12模块详解

英飞凌Aurix2G TC3XX GPT12模块详解 本文主要介绍英飞凌 Aurix2G TC3XX系列芯片GPT12模块硬件原理、MCAL相关配置和部分代码实现。 文章目录 英飞凌Aurix2G TC3XX GPT12模块详解1 模块介绍2 功能介绍2.1 结构2.2 独立运行模式2.2.1 定时器模式2.2.2 门控定时器模式2.2.3 计数…

大数据程序猿不可不看的资料大全

​ 随着大数据技术的发展&#xff0c;大数据程序猿在数据采集、处理、分析、存储等方面的技能需求不断增加。要在这个领域保持竞争力&#xff0c;系统性地学习和掌握大数据工具、技术架构和行业趋势是非常重要的。以下为您提供一份围绕大数据程序猿不可不看的资料大全&#xf…

抓包工具WireShark使用记录

目录 网卡选择&#xff1a; 抓包流程&#xff1a; 捕获过滤器 常用捕获过滤器&#xff1a; 抓包数据的显示 显示过滤器&#xff1a; 常用的显示过滤器&#xff1a; 实际工作中&#xff0c;在平台对接&#xff0c;设备对接等常常需要调试接口&#xff0c;PostMan虽然可以进…

MySQL数据迁移到SQLServer数据库

随着云计算技术的发展以及大数据时代的到来&#xff0c;越来越多的企业开始寻求更加高效、安全的数据管理解决方案。MySQL作为一种开源的关系型数据库管理系统&#xff0c;在互联网应用开发中占据了极其重要的位置&#xff1b;而另一方面&#xff0c;Microsoft SQL Server凭借其…

【STM32开发】-FreeRTOS开发入手学习

一、什么是FreeRTOS&#xff1f; FreeRTOS 是 RTOS 系统的一种&#xff0c;FreeRTOS 十分的小巧&#xff0c;可以在资源有限的微控制器中运行&#xff1b; 1、 FreeRTOS是免费的。 2、许多其他半导体厂商产品的 SDK 包就使用 FreeRTOS 作为其操作系统&#xff0c;尤其是 WIFI、…

【软考】系统分析师第二版 新增章节 第20章微服务系统分析与设计

微服务系统是一类基于微服务架构风格的分布式系统&#xff0c;它将应用程序拆分成多个独立的小型服务&#xff0c;每个服务都运行在独立的进程中&#xff0c;并采用轻量级通信协议进行通信。这些服务可以由不同的团队开发、不同的编程语言编写&#xff0c;并且可以按需部署。微…

【笔记】自动驾驶预测与决策规划_Part6_不确定性感知的决策过程

文章目录 0. 前言1. 部分观测的马尔可夫决策过程1.1 POMDP的思想以及与MDP的联系1.1.1 MDP的过程回顾1.1.2 POMDP定义1.1.3 与MDP的联系及区别POMDP 视角MDP 视角决策次数对最优解的影响 1.2 POMDP的3种常规解法1.2.1 连续状态的“Belief MDP”方法1. 信念状态的定义2. Belief …

【SpringBoot】 黑马大事件笔记-day2

目录 用户部分 实体类属性的参数校验 更新用户密码 文章部分 规定josn日期输出格式 分组校验 上期回顾&#xff1a;【SpringBoot】 黑马大事件笔记-day1 用户部分 实体类属性的参数校验 对应的接口文档&#xff1a; 基本信息 请求路径&#xff1a;/user/update 请求方式&#…

HarmonyOS入门 : 获取网络数据,并渲染到界面上

1. 环境搭建 开发HarmonyOS需要安装DevEco Studio&#xff0c;下载地址 : https://developer.huawei.com/consumer/cn/deveco-studio/ 2. 如何入门 入门HarmonyOS我们可以从一个实际的小例子入手&#xff0c;比如获取网络数据&#xff0c;并将其渲染到界面上。 本文就是基于…

AndroidStudio-视图基础

一、设置视图的宽高 1.在XML文件中设置视图宽高 视图宽度通过属性android:layout_width表达&#xff0c;视图高度通过属性android:layout_height表达&#xff0c;宽高的取值主要有下列三种: &#xff08;1&#xff09;wrap_content:表示与内容自适应。对于文本视图来说&…

三菱QD77MS定位模块紧急停止功能

“紧急停止功能” 是通过简单运动模块的外部输入连接用连接器上连接的紧急停止输入&#xff0c;对同服放大器的全部轴进行批量停止的功能。(初始值为“0:有效”。)通过“[r.82]紧急停止有效/无效设置”可以选择紧急停止输入的有效/无效。 [1]控制内容 将“[r82]紧急停止有效/无…

Android JNI 技术入门指南

引言 在Android开发中&#xff0c;Java是一种主要的编程语言&#xff0c;然而&#xff0c;对于一些性能要求较高的场景&#xff08;如音视频处理、图像处理、计算密集型任务等&#xff09;&#xff0c;我们可能需要使用到C或C等语言来编写底层的高效代码。为了实现Java代码与C…