Python 连接数据源与邮件功能(九)
文章目录
- 一、概述
- 二、Python 连接数据源
- 1)Python MySQL 基础操作
- 1、部署MySQL
- 2、MySQL Connector 库
- 【1】安装 mysql-connector-python 库
- 【2】连接 MySQL
- 【3】增加数据
- 【4】查询数据
- 【5】更新数据
- 【6】删除数据
- 2、PyMySQL 库
- 【1】安装 PyMySQL 库
- 【2】连接 MySQL
- 【3】增加数据
- 【4】查询数据
- 【5】更新数据
- 【6】更新数据
- 2)Python Redis 基础操作
- 1、部署 Redis
- 2、Python Redis 基本操作
- 【1】安装 Redis 客户端库
- 【2】连接 Redis
- 【3】设置键值对
- 【4】获取键值对
- 【5】删除键
- 【6】判断键是否存在
- 【7】设置过期时间
- 【8】自增和自减
- 三、邮件功能
- 1)开通邮箱服务功能
- 1、邮件协议介绍
- 2、QQ邮箱开启邮件服务设置
- 3、163邮箱开启邮件服务设置
- 2)Python 邮件示例讲解
一、概述
连接数据源和邮件发送和邮件接收也是在项目中很常见的功能,数据量小的话,可以存在MySQL、Redis、PostgreSQL 等等,数据量大的话,就可以考虑大型分布式高可用存储数据库系统例如:Hadoop、StarRocks、ClickHouse等等。邮件发送一般用于通知,像告警通知,下单通知,支付通知等等。

二、Python 连接数据源
1)Python MySQL 基础操作
Python是一种流行的编程语言,而MySQL是一种常用的关系型数据库管理系统。Python中有许多不同的MySQL库可供使用,其中一些最常用的库包括:
MySQL Connector——这是MySQL官方提供的Python库,可以在Python 2.7和Python 3.x中使用。它提供了与MySQL数据库的连接和交互的API,并支持多种操作系统。PyMySQL——这是一个纯Python实现的MySQL客户端库,可以在Python 2.7和Python 3.x中使用。它提供了一种简单而直接的方法来连接到MySQL服务器,并执行查询和其他操作。
1、部署MySQL
MySQL的介绍和部署可以参考我以下几篇文章:
- 面试宝典之——Mysql
- MySQL高可用实战( MHA)
- 【云原生】MySQL on k8s 环境部署
2、MySQL Connector 库
Python 通过 MySQL Connector 模块提供了访问 MySQL 数据库的能力,可以通过该模块使用一系列的函数来进行数据库操作。
下面是一些常用的 Python MySQL 函数:
-
connect():用于连接 MySQL 数据库,返回一个连接对象。 -
cursor():用于创建一个游标对象,该对象用于执行查询语句和读取数据。 -
execute():用于执行 SQL 语句,返回受影响的行数。 -
fetchone():用于获取结果集中的下一行数据。 -
fetchall():用于获取结果集中的所有数据。 -
commit():用于提交事务。 -
rollback():用于回滚事务。 -
close():用于关闭连接。
以下是使用MySQL Connector进行连接和增删改查的演示示例。
【1】安装 mysql-connector-python 库
首先,需要安装mysql-connector-python库:
pip install mysql-connector-python
【2】连接 MySQL
要进行数据库操作,需要先连接MySQL数据库。连接MySQL数据库的代码如下:
import mysql.connector# 连接到MySQL服务器
conn = mysql.connector.connect(
user='username',
password='password',
host='hostname',
database='database_name'
)mycursor = conn.cursor()# 关闭连接
mycursor.close()
conn.close()
在连接数据库时需要替换host、user、password和database为相应的值。
【3】增加数据
可以使用 execute() 函数执行 INSERT INTO 语句,将数据插入到数据库中。以下是一个示例:
import mysql.connector# 连接到MySQL服务器
conn = mysql.connector.connect(
user='username',
password='password',
host='hostname',
database='database_name'
)mycursor = conn.cursor()sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = ("John", "Highway 21")
mycursor.execute(sql, val)conn.commit()print(mycursor.rowcount, "record inserted.")# 关闭连接
mycursor.close()
conn.close()
在这个例子中,将一条记录插入到名为"customers"的表中。通过将数据作为元组传递给execute()方法,将值插入到占位符中。最后,需要使用commit()方法提交更改。
【4】查询数据
可以使用 execute() 函数执行 SELECT 语句,查询数据库中的数据。以下是一个示例:
import mysql.connector# 连接到MySQL服务器
conn = mysql.connector.connect(
user='username',
password='password',
host='hostname',
database='database_name'
)mycursor = conn.cursor()mycursor.execute("SELECT * FROM customers")myresult = mycursor.fetchall()for x in myresult:print(x)# 关闭连接
mycursor.close()
conn.close()
在这个例子中,从名为"customers"的表中选择所有记录,并使用fetchall()方法将结果存储在变量myresult中。最后,使用循环打印每个记录。
【5】更新数据
可以使用 execute() 函数执行 UPDATE 语句,更新数据库中的数据。以下是一个示例:
import mysql.connector# 连接到MySQL服务器
mydb = mysql.connector.connect(
user='username',
password='password',
host='hostname',
database='database_name'
)mycursor = mydb.cursor()sql = "UPDATE customers SET address = 'Canyon 123' WHERE address = 'Highway 21'"mycursor.execute(sql)mydb.commit()print(mycursor.rowcount, "record(s) affected")# 关闭连接
cursor.close()
conn.close()
在这个例子中,将名为"customers"的表中地址为"Highway 21"的记录的地址更新为"Canyon 123"。
【6】删除数据
可以使用 execute() 函数执行 DELETE 语句,删除数据库中的数据。以下是一个示例:
import mysql.connector# 连接到MySQL服务器
mydb = mysql.connector.connect(
user='username',
password='password',
host='hostname',
database='database_name'
)mycursor = mydb.cursor()sql = "DELETE FROM customers WHERE address = 'Canyon 123'"mycursor.execute(sql)mydb.commit()print(mycursor.rowcount, "record(s) deleted")# 关闭连接
cursor.close()
conn.close()
2、PyMySQL 库
Python PyMySQL 是一个纯 Python 实现的 MySQL 客户端库,使用 PyMySQL 可以连接 MySQL 数据库并执行数据库操作。下面介绍一些 PyMySQL 常用的函数:
-
connect():用于连接 MySQL 数据库,返回一个连接对象。 -
cursor():用于创建一个游标对象,该对象用于执行查询语句和读取数据。 -
execute():用于执行 SQL 语句,返回受影响的行数。 -
executemany():用于执行多个 SQL 语句,返回受影响的行数。 -
fetchone():用于获取结果集中的下一行数据。 -
fetchall():用于获取结果集中的所有数据。 -
fetchmany():用于获取结果集中指定数量的数据。 -
commit():用于提交事务。 -
rollback():用于回滚事务。 -
close():用于关闭连接。
【1】安装 PyMySQL 库
首先,需要安装PyMySQL库:
pip install PyMySQL
【2】连接 MySQL
要进行数据库操作,需要先连接MySQL数据库。连接MySQL数据库的代码如下:
接下来,连接到MySQL服务器并执行查询:
import pymysql# 连接到MySQL服务器
conn = pymysql.connect(host='hostname',port=port,user='username',password='password',db='database_name',charset='utf8'
)# 创建游标对象
mycursor = conn.cursor()
在上面的代码中,需要将hostname、port、username、password和database_name替换为实际的数据库连接信息。
【3】增加数据
可以使用 execute() 函数执行 INSERT INTO 语句,将数据插入到数据库中。以下是一个示例:
import pymysql# 连接数据库
conn = pymysql.connect(host="localhost",user="username",password="password",database="mydatabase"
)# 创建游标对象
mycursor = conn.cursor()# 执行插入语句
sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = ("John", "Highway 21")
mycursor.execute(sql, val)# 提交事务
conn.commit()# 打印插入数据的 ID
print(mycursor.lastrowid)# 关闭连接
cursor.close()
conn.close()
【4】查询数据
可以使用 execute() 函数执行 SELECT 语句,查询数据库中的数据。以下是一个示例:
import pymysql# 连接数据库
conn = pymysql.connect(host="localhost",user="username",password="password",database="mydatabase"
)# 创建游标对象
mycursor = conn.cursor()# 执行查询语句
sql = "SELECT * FROM customers"
mycursor.execute(sql)# 获取结果集中的所有数据
myresult = mycursor.fetchall()# 打印数据
for x in myresult:print(x)# 关闭连接
cursor.close()
conn.close()
【5】更新数据
可以使用 execute() 函数执行 UPDATE 语句,更新数据库中的数据。以下是一个示例:
import pymysql# 连接数据库
conn = pymysql.connect(host="localhost",user="username",password="password",database="mydatabase"
)# 创建游标对象
mycursor = conn.cursor()# 执行更新语句
sql = "UPDATE customers SET address = 'Canyon 123' WHERE address = 'Highway 21'"
mycursor.execute(sql)# 提交事务
conn.commit()# 打印受影响的行数
print(mycursor.rowcount)# 关闭连接
cursor.close()
conn.close()
【6】更新数据
可以使用 execute() 函数执行 DELETE 语句,删除数据库中的数据。以下是一个示例:
import pymysql# 连接数据库
conn = pymysql.connect(host="localhost",user="username",password="password",database="mydatabase"
)# 创建游标对象
mycursor = conn.cursor()# 执行删除语句
sql = "DELETE FROM customers WHERE address = 'Canyon 123'"
mycursor.execute(sql)# 提交事务
conn.commit()# 打印受影响的行数
print(mycursor.rowcount)# 关闭连接
cursor.close()
conn.close()
上述代码演示了如何连接到 MySQL 数据库、执行插入、更新、删除和查询操作以及关闭连接。在实际应用中,还可以使用其他函数来执行复杂的操作,如连接池、事务管理等。
2)Python Redis 基础操作
Redis 是一种基于内存的数据结构存储系统,它可以用作数据库、缓存和消息代理。Python 是一种流行的编程语言,提供了一个 Redis 客户端库,可以轻松地与 Redis 交互。下面是一些 Python Redis 基本操作的示例。
1、部署 Redis
Redis 的介绍和部署可以参考我以下几篇文章:
- 面试宝典之——Redis
- Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)
- 【云原生】Redis on k8s 编排部署讲解与实战操作
2、Python Redis 基本操作
【1】安装 Redis 客户端库
要在 Python 中使用 Redis,需要安装 Redis 客户端库。可以使用 pip 工具安装:
pip install redis
【2】连接 Redis
在 Python 中连接 Redis,需要使用 Redis 客户端库中的 Redis 类。可以使用以下代码连接到 Redis:
import redisredis_client = redis.Redis(host='localhost', port=6379, db=0)
【3】设置键值对
可以使用 set 方法设置键值对:
redis_client.set('key', 'value')
也可以使用 mset 方法一次设置多个键值对:
redis_client.mset({'key1': 'value1', 'key2': 'value2'})
【4】获取键值对
可以使用 get 方法获取单个键的值:
value = redis_client.get('key')
print(value)
也可以使用 mget 方法一次获取多个键的值:
values = redis_client.mget(['key1', 'key2'])
print(values)
【5】删除键
可以使用 delete 方法删除一个键:
redis_client.delete('key')
也可以使用 delete 方法删除多个键:
redis_client.delete('key1', 'key2')
【6】判断键是否存在
可以使用 exists 方法判断一个键是否存在:
exists = redis_client.exists('key')
print(exists)
【7】设置过期时间
可以使用 expire 方法设置一个键的过期时间(以秒为单位):
redis_client.expire('key', 60)
也可以使用 expireat 方法设置一个键的过期时间(以 Unix 时间戳为单位):
import timeexpire_time = int(time.time()) + 60
redis_client.expireat('key', expire_time)
【8】自增和自减
可以使用 incr 方法对一个键进行自增操作:
redis_client.set('count', 0)
redis_client.incr('count')
也可以使用 decr 方法对一个键进行自减操作:
redis_client.set('count', 10)
redis_client.decr('count')
以上是一些 Python Redis 的基本操作示例,可以根据具体需要进行适当修改和调整。
三、邮件功能
Python 中可以使用标准库中的 smtplib 和 email 模块来发送和接收电子邮件。
1)开通邮箱服务功能
1、邮件协议介绍
SMTP、POP3和IMAP都是电子邮件协议,用于在计算机之间传递和接收电子邮件。
-
SMTP(Simple Mail Transfer Protocol)是用于发送电子邮件的协议。它定义了电子邮件如何通过互联网发送,包括如何连接到邮件服务器、如何验证身份、如何传输邮件、如何处理错误等。 -
POP3(Post Office Protocol version 3)是用于接收电子邮件的协议。它定义了电子邮件如何从邮件服务器下载到本地计算机上的电子邮件客户端。POP3协议允许用户下载所有的邮件,但是在本地计算机上只保留一份副本。 -
IMAP(Internet Message Access Protocol)也是用于接收电子邮件的协议。它定义了电子邮件如何从邮件服务器下载到本地计算机上的电子邮件客户端。IMAP协议允许用户对邮件进行管理和组织,例如在本地计算机上创建文件夹来存储邮件,而不是在邮件服务器上。这使得IMAP更适合那些需要在多个设备上使用电子邮件的用户。
总之,SMTP、POP3和IMAP是三种不同的协议,每个协议都有其独特的作用,使得电子邮件的发送和接收变得更加便捷和高效。简单地说,SMTP管发,POP3/IMAP管收。
POP(Post Office Protocol)和 IMAP(Internet Message Access Protocol)都是电子邮件客户端和邮件服务器之间的协议,但是它们在处理电子邮件的方式上有一些重要的区别:
-
工作方式:POP将邮件从邮件服务器下载到本地计算机上的邮件客户端,然后将邮件从邮件服务器中删除,这意味着用户只能在本地计算机上访问邮件的一份副本;而IMAP将邮件保留在邮件服务器上,只有在用户请求访问邮件时才会下载邮件到本地计算机上的邮件客户端。
-
多设备支持:由于POP只下载邮件的一份副本到本地计算机上,因此如果用户使用多个设备(如电脑、平板电脑、智能手机等)来访问邮件,则每个设备上的邮件客户端都会显示不同的邮件状态。而IMAP协议允许用户在多个设备上访问邮件,因为邮件始终保留在邮件服务器上。
-
邮件管理:IMAP允许用户在邮件服务器上对邮件进行管理,例如创建、删除和重命名文件夹,标记邮件已读或未读等。这使得用户可以轻松地在多个设备之间同步邮件状态。而POP协议只是简单地下载邮件并删除它们,不能像IMAP那样管理邮件。
-
带宽:由于IMAP只在用户需要访问邮件时才下载邮件,因此它可以节省带宽。而POP在每次下载邮件时都会占用带宽,因为它要下载所有邮件的一份副本。
总之,IMAP是更先进的邮件协议,可以提供更多的功能和灵活性,特别是对于那些需要在多个设备上访问邮件的用户。而POP适合那些只使用单个设备访问邮件的用户。
2、QQ邮箱开启邮件服务设置


3、163邮箱开启邮件服务设置



最后整理一下邮箱服务器:

2)Python 邮件示例讲解
以下是一个简单的 Python 脚本,演示了如何使用这两个模块来发送电子邮件。
发送邮件实例:
import smtplib
from email.mime.text import MIMEText
from email.header import Header# 设置邮件参数
smtp_server = 'smtp.example.com' # 邮件服务器
from_addr = 'your_email@example.com' # 发件人邮箱
to_addr = 'recipient_email@example.com' # 收件人邮箱
username = 'your_email@example.com' # 发件人邮箱账号
password = 'your_email_password' # 发件人邮箱密码# 构建邮件内容
msg = MIMEText('Hello, this is a test email sent by Python.', 'plain', 'utf-8')
msg['From'] = Header('Sender Name', 'utf-8')
msg['To'] = Header('Recipient Name', 'utf-8')
msg['Subject'] = Header('Python Test Email', 'utf-8')# 发送邮件
try:server = smtplib.SMTP(smtp_server, 25)server.login(username, password)server.sendmail(from_addr, to_addr, msg.as_string())server.quit()print("Email sent successfully!")
except smtplib.SMTPException:print("Error: 无法发送邮件")
接收邮件示例:
import poplib# 设置邮件参数
pop_server = 'pop.example.com' # 邮件服务器
username = 'your_email@example.com' # 邮箱账号
password = 'your_email_password' # 邮箱密码# 连接到邮件服务器
server = poplib.POP3(pop_server)
server.user(username)
server.pass_(password)# 获取邮件列表
resp, mails, octets = server.list()
print("Total emails: {}".format(len(mails)))# 获取最新一封邮件
resp, lines, octets = server.retr(len(mails))
msg_content = b'\n'.join(lines).decode('utf-8')# 解析邮件内容
from email.parser import Parser
msg = Parser().parsestr(msg_content)
print("Subject: {}".format(msg['Subject']))
print("From: {}".format(msg['From']))
print("To: {}".format(msg['To']))
print("Content:\n{}".format(msg.get_payload()))
这里的示例代码仅仅是一个简单的示例,可以根据具体的需要来修改和扩展。在使用示例时,注意修改上面的连接信息哦。
Python 连接数据源与邮件功能的讲解就先到这里了,有任何疑问欢迎给我留言哦,欢迎点赞、转发并收藏哦,也可关注我的公众号【大数据与云原生技术分享】进行深入交流技术~
相关文章:
Python 连接数据源与邮件功能(九)
文章目录一、概述二、Python 连接数据源1)Python MySQL 基础操作1、部署MySQL2、MySQL Connector 库【1】安装 mysql-connector-python 库【2】连接 MySQL【3】增加数据【4】查询数据【5】更新数据【6】删除数据2、PyMySQL 库【1】安装 PyMySQL 库【2】连接 MySQL【…...
网站如何锁定用户,超级浏览器有办法解决吗?
随着全球开放,跨境电商人纷纷开启了2023年的搞钱之旅,很多期待着在新的一年大干一场。但前事不忘后事之师,2022年跨境生意全面沦陷,其实除了大环境的因素之外,还有一个很重要的原因是,各个平台都开始实行非…...
Ubuntu下使用Wine运行HBuilderX
安装完wine后,在HbuilderX的目录中打开终端,直接输入wine HBuilderX.exe命令,启动过程中会提示安装wine-mono组件,点击安装按钮下载安装该组件,该组件下载速度慢,需要等待特别长时间。 安装完毕后&…...
如何高效远程维护分布在海外的中大型智能设备?
一、行业需求 随着越来越多的企业进行全球化经营,设备制造商和系统集成商的设备分布到全球各地,数量多而且分散,传统的设备运维方式,面临着出差成本高,工作效率低,服务不及时等问题,客户常常因…...
【双指针问题】LeetCode 925. 长按键入
Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…...
APP测试中IOS和Android的区别,有哪些注意点?
01、常识性区别 02、导航方式 iOS:Tab放在页面底部,不能通过滑动来切换,只能点击。也有放在上面的,也不能滑动,但有些Tab本身可以滑动,比如天猫的。还有新闻类的应用。 Android:一般放在页面…...
2019蓝桥杯真题平方序列(填空题) C语言/C++
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小明想找到两个正整数 X 和 Y,满足2019<X<Y;2019^2, X^2, Y^2组成等差数列。 请你求出在所有可能的解中,XY 的最小值是多少?…...
vue中,给一个URL地址,利用FileSaver.js插件下载文件到本地
①首先下载 FileSaver.js 插件 npm install file-saver --save ②在需要的.vue页面引入 import { saveAs } from file-saver 在HTML中引入 <script src"https://cdn.bootcdn.net/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js"></script> //Fil…...
从0开始学python -34
Python3 输入和输出-2 读和写文件 open() 将会返回一个 file 对象,基本语法格式如下: open(filename, mode)filename:包含了你要访问的文件名称的字符串值。mode:决定了打开文件的模式:只读,写入,追加等。…...
瑞典军事研究:从认知心理学的视角探讨军事创新进程
来源:Military Innovation as the Result of Mental Models of Technology 《摘要》 政治紧张局势的加剧和技术发展的进步促使Scandinavian 国家(斯堪的纳维亚半岛,欧洲最大的半岛,有挪威、瑞典两国以及芬兰北端的一小部分。&am…...
【MySQL进阶-08】深入理解innodb存储格式,双写机制,buffer pool底层结构和淘汰策略
MySql系列整体栏目 内容链接地址【一】深入理解mysql索引本质https://blog.csdn.net/zhenghuishengq/article/details/121027025【二】深入理解mysql索引优化以及explain关键字https://blog.csdn.net/zhenghuishengq/article/details/124552080【三】深入理解mysql的索引分类&a…...
5. AOP
一、如何定义一个MethodHandler? 1.Controller注解修饰的类 1.注册成Spring Bean 2.表示它是一个SpringMVC下的Controller 2.在这个类下的方法中,只要被RequestMapping修饰&&方法的形参符合规定(需要看文档) 方法的返回值符合规定…...
ubuntu上尝试libpqxx库链接人大金仓
ubuntu上尝试libpqxx库链接人大金仓 C的项目让使用国产数据库 运维给架了一个人大金仓数据库, Kingbase 8 是基于 PostgreSQL 9.6 做的, 尝试直接使用libpqxx链接数据库。 文章目录ubuntu上尝试libpqxx库链接人大金仓第一步 搭建libpqxx开发环境搜索lib…...
【Python入门第十二天】Python 列表
Python 集合(数组) Python 编程语言中有四种集合数据类型: 列表(List)是一种有序和可更改的集合。允许重复的成员。元组(Tuple)是一种有序且不可更改的集合。允许重复的成员。集合(…...
Android 异步操作库 RxJava
RxJava概述 RxJava 是一种响应式编程,来创建基于事件的异步操作库。基于事件流的链式调用、逻辑清晰简洁。 RxJava 我的理解是将事件从起点(上游)流向终点(下游),中间有很多卡片对数据进操作并传递&#x…...
2021-12-05青少年软件编程(C语言)等级考试试卷(六级)解析
2021-12-05青少年软件编程(C语言)等级考试试卷(六级)解析T1. 电话号码 给你一些电话号码,请判断它们是否是一致的,即是否有某个电话是另一个电话的前缀。比如: Emergency 911 Alice 97 625 999 Bob 91 12 54 26 在这个例子中,我们不可能拨通Bob的电话,因为Emergency的…...
github 使用
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、git与github二、出错的地方1.GitHub没有css样式2、git clone出现错误3、明明创建了responsibility 但git 不显示一、git与github 这个博客写的很好!…...
Kubernetes集群维护—备份恢复与升级
Etcd数据库备份与恢复 需要先安装etcd备份工具yum install etcd -y按不同安装方式执行不同备份与恢复kubeadm部署方式: 备份:ETCDCTL_API3 etcdctl snapshot save snap.db --endpointshttps://127.0.0.1:2379 --cacert/etc/kubernetes/pki/etcd/ca.cr…...
前端开发常用案例(二)
这里写目录标题1.loding加载动画2.全屏加载动画效果3.吃豆豆4.鼠标悬停3D翻转效果5.3D旋转木马效果6.flex弹性布局-酷狗音乐播放列表flex弹性布局-今日头条首页热门视频栏grid网格布局-360图片展示小米商城左侧二级菜单1.loding加载动画 代码如下: <!DOCTYPE h…...
基于springboot+vue的儿科保健计划免疫系统
基于springbootvue的儿科保健计划免疫系统 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
