Python筑基之旅-MySQL数据库(三)

目录

一、数据库操作

1、创建

1-1、用mysql-connector-python库

1-2、用PyMySQL库

1-3、用PeeWee库

1-4、用SQLAlchemy库

2、删除

2-1、用mysql-connector-python库

2-2、用PyMySQL库

2-3、用PeeWee库

2-4、用SQLAlchemy库

二、数据表操作

1、创建

1-1、用mysql-connector-python库

1-2、用PyMySQL库

1-3、用PeeWee库

1-4、用SQLAlchemy库

2、删除

2-1、用mysql-connector-python库

2-2、用PyMySQL库

2-3、用PeeWee库

2-4、用SQLAlchemy库

三、推荐阅读

1、Python函数之旅

2、Python算法之旅

3、博客个人主页
​​​​​​​

一、数据库操作

1、创建

        现需在MySQL服务器上新建数据库test_database;同时,在新建的数据test_database中创建数据表test_table不管是数据库,还是数据表,若不存在,则新建

1-1、用mysql-connector-python库
import mysql.connector
# 配置数据库连接信息
config = {
    'user': 'root',
    'password': '123456',  # 在此输入你的MySQL密码,请自行修改
    'host': '127.0.0.1',
    'database': 'mysql'    # 如果要指定数据库
}
# 连接到MySQL服务器
try:
    cnx = mysql.connector.connect(**config)
    cursor = cnx.cursor()

    # 创建新数据库test_database(如果不存在)
    create_db_query = "CREATE DATABASE IF NOT EXISTS test_database"
    cursor.execute(create_db_query)

    # 切换到新数据库
    use_db_query = "USE test_database"
    cursor.execute(use_db_query)

    # 创建新表test_table(如果不存在)
    # 假设我们有一个简单的表,包含 id(整数,主键,自增)、name(字符串)和 age(整数)
    create_table_query = """    
    CREATE TABLE IF NOT EXISTS test_table (    
        id INT AUTO_INCREMENT PRIMARY KEY,    
        name VARCHAR(255) NOT NULL,    
        age INT    
    )    
    """
    cursor.execute(create_table_query)
    # 提交事务
    cnx.commit()
except mysql.connector.Error as err:
    print(f"Error: {err}")
    if cnx.is_connected():
        cnx.rollback()  # 如果需要回滚事务的话
finally:
    # 关闭游标和连接
    if cursor:
        cursor.close()
    if cnx.is_connected():
        cnx.close()
1-2、用PyMySQL库
import pymysql
# 配置数据库连接信息
config = {
    'user': 'root',
    'password': '123456',  # 在此输入你的MySQL密码,请自行修改
    'host': '127.0.0.1',
    'database': 'mysql'  # 如果要指定数据库,但这里我们稍后会创建新数据库
}
# 连接到MySQL服务器
try:
    # 注意:PyMySQL没有直接使用**config的方式,需要分别传入参数
    cnx = pymysql.connect(host=config['host'],
                          user=config['user'],
                          password=config['password'],
                          charset='utf8mb4',  # 可选,添加字符集支持
                          cursorclass=pymysql.cursors.DictCursor)  # 使用字典游标
    # 创建新数据库test_database(如果不存在)
    with cnx.cursor() as cursor:
        create_db_query = "CREATE DATABASE IF NOT EXISTS test_database"
        cursor.execute(create_db_query)
    # 切换到新数据库
    # 注意:PyMySQL没有直接的USE语句,我们需要断开连接并重新连接到新数据库
    cnx.close()
    config['database'] = 'test_database'
    cnx = pymysql.connect(**config, charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)
    # 创建新表test_table(如果不存在)
    # 假设我们有一个简单的表,包含 id(整数,主键,自增)、name(字符串)和 age(整数)
    with cnx.cursor() as cursor:
        create_table_query = """  
        CREATE TABLE IF NOT EXISTS test_table (  
            id INT AUTO_INCREMENT PRIMARY KEY,  
            name VARCHAR(255) NOT NULL,  
            age INT  
        )  
        """
        cursor.execute(create_table_query)
    # 提交事务
    cnx.commit()
except pymysql.MySQLError as err:
    print(f"Error: {err}")
    if cnx:
        cnx.rollback()  # 如果需要回滚事务的话(但对于DDL语句,通常没有回滚的必要)
finally:
    # 关闭游标和连接
    if cnx:
        cnx.close()
1-3、用PeeWee库
from peewee import *
# 配置数据库连接信息,这里尝试连接到名为'mysql'的数据库
db = MySQLDatabase('mysql', user='root', password='123456', host='127.0.0.1')
# 尝试连接数据库
try:
    db.connect()
    # 创建新数据库test_database(如果不存在),这里通过执行原始SQL语句来实现
    db.execute_sql("CREATE DATABASE IF NOT EXISTS test_database")
    # 更改数据库连接对象以连接到新创建的数据库(或已存在的)
    db = MySQLDatabase('test_database', user='root', password='123456', host='127.0.0.1')
    db.connect()
    # 定义模型(对应于数据库表)
    class TestTable(Model):
        id = AutoField()  # 自增主键
        name = CharField(null=False)  # 字符字段,不能为空
        age = IntegerField(null=True)  # 整数字段,可以为空
        class Meta:
            database = db  # 指定该模型使用的数据库连接
        # 自定义的创建表方法,这里实际上是覆盖了基类Model的create_table方法
        # 但实际上这里不需要重新定义,因为Peewee会自动在调用create_table时处理提交事务
        def create_table(cls, fail_silently=False, **options):
            super(TestTable, cls).create_table(fail_silently, **options)
            db.commit()  # 这里提交事务其实是不必要的,因为Peewee默认会处理
    # 调用自定义的create_table方法来创建表(如果不存在)
    # 但通常我们会直接调用 TestTable.create_table() 而无需修改它
    TestTable.create_table()
except Exception as e:
    print(f"Error: {e}")
    # 如果连接已关闭,这里的关闭操作是多余的,因为db.close()在连接关闭时不会引发错误
    if db.is_closed():
        db.close()  # 实际上,这里的检查是多余的,因为db在异常发生前应该是打开的
    else:
        db.rollback()  # 如果有事务在执行并且需要回滚的话(但在这个场景中,通常没有显式开启的事务)
finally:
    # 无论是否发生异常,都要确保数据库连接被关闭
    if not db.is_closed():
        db.close()
1-4、用SQLAlchemy库
略,该库本身不支持直接创建数据库,需要借助其他第三方库,如PyMySQL

2、删除

        现需在MySQL服务器上删除已有数据库test_database,以下为借助第三方库实现:

2-1、用mysql-connector-python库
import mysql.connector
# MySQL服务器连接参数
config = {
    'user': 'root',
    'password': '123456',  # 在此输入你的MySQL密码,请自行修改
    'host': '127.0.0.1',
    'database': 'mysql'    # 如果要指定数据库
}
# 连接到MySQL服务器
try:
    connection = mysql.connector.connect(**config)
    cursor = connection.cursor()
    # 执行SQL语句来删除test_database数据库
    sql = "DROP DATABASE IF EXISTS test_database"
    cursor.execute(sql)
    # 提交事务
    connection.commit()
    print("Database test_database deleted successfully.")
except mysql.connector.Error as error:
    print(f"Error: '{error}'")
finally:
    # 关闭游标和连接
    if connection.is_connected():
        cursor.close()
        connection.close()
2-2、用PyMySQL库
import pymysql
# MySQL服务器连接参数
config = {
    'user': 'root',  # 替换为你的MySQL用户名
    'password': '123456',  # 替换为你的MySQL密码
    'host': '127.0.0.1',  # 替换为你的MySQL服务器地址
    'port': 3306,  # 如果你的MySQL不是默认端口,需要指定
    'charset': 'utf8mb4',  # 设置字符集
    'cursorclass': pymysql.cursors.DictCursor  # 使用字典游标,这不是必需的
}
# 连接到MySQL服务器(注意这里我们没有指定database参数)
try:
    # 因为我们要删除数据库,所以不需要连接到特定的数据库
    connection = pymysql.connect(**{k: v for k, v in config.items() if k != 'database'})
    with connection.cursor() as cursor:
        # 执行SQL语句来删除test_database数据库
        sql = "DROP DATABASE IF EXISTS test_database"
        cursor.execute(sql)
    # 提交事务,可省略
    connection.commit()
    print("Database test_database deleted successfully.")
except pymysql.MySQLError as error:
    print(f"Error: '{error}'")
finally:
    # 关闭连接
    if connection:
        connection.close()
2-3、用PeeWee库
略,该库本身不支持直接删除数据库,需要借助其他第三方库,如PyMySQL
2-4、用SQLAlchemy库
略,该库本身不支持直接删除数据库,需要借助其他第三方库,如PyMySQL

二、数据表操作

1、创建

        在MySQL服务器上已有数据库test_database,需在该数据库中创建数据表myelsa_table,以下为借助第三方库实现:

1-1、用mysql-connector-python库
import mysql.connector
# 数据库连接配置
config = {
    'user': 'root',  # 替换为你的MySQL用户名
    'password': '123456',  # 替换为你的MySQL密码
    'host': '127.0.0.1',  # 如果数据库在远程服务器上,请替换为相应的主机名或IP地址
    'database': 'test_database',  # 数据库名
    'raise_on_warnings': True
}
# 连接到数据库
cnx = mysql.connector.connect(**config)
cursor = cnx.cursor()
# 创建数据表的SQL语句
create_table_query = """  
CREATE TABLE IF NOT EXISTS myelsa_table (  
    name VARCHAR(255) NOT NULL, 
    ID_Card VARCHAR(255) NOT NULL, 
    age INT NOT NULL,  
    city VARCHAR(255) NOT NULL,  
    PRIMARY KEY (ID_Card)  -- 如果ID_Card字段是唯一的,可以设为主键,否则可以移除这行  
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;  
"""
# 执行SQL语句
cursor.execute(create_table_query)
# 提交更改(如果使用了事务)
cnx.commit()
# 关闭连接
cursor.close()
cnx.close()
print("Table myelsa_table created successfully!")
1-2、用PyMySQL库
import pymysql
# 数据库连接配置
config = {
    'user': 'root',  # 替换为你的MySQL用户名
    'password': '123456',  # 替换为你的MySQL密码
    'host': '127.0.0.1',  # 如果数据库在远程服务器上,请替换为相应的主机名或IP地址
    'database': 'test_database',  # 数据库名
    'charset': 'utf8mb4',  # 字符集设置
    'cursorclass': pymysql.cursors.DictCursor  # 使用字典游标
}
# 连接到数据库
connection = pymysql.connect(**config)
try:
    with connection.cursor() as cursor:
        # 创建数据表的SQL语句
        create_table_query = """    
        CREATE TABLE IF NOT EXISTS myelsa_table (    
            name VARCHAR(255) NOT NULL,   
            ID_Card VARCHAR(255) NOT NULL,   
            age INT NOT NULL,    
            city VARCHAR(255) NOT NULL,    
            PRIMARY KEY (ID_Card)  -- 如果ID_Card字段是唯一的,可以设为主键  
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;    
        """
        # 执行SQL语句
        cursor.execute(create_table_query)
        # 提交更改(对于自动提交模式,这一步可能不是必须的)
        connection.commit()
finally:
    connection.close()
    print("Table myelsa_table created successfully!")
1-3、用PeeWee库
from peewee import *
# 数据库连接配置
db = MySQLDatabase('test_database', user='root', password='123456', host='127.0.0.1')
# 定义模型
class MyElsaTable(Model):
    name = CharField(max_length=255, null=False)
    ID_Card = CharField(max_length=255, unique=True)  # 假设ID_Card是唯一的
    age = IntegerField(null=False)
    city = CharField(max_length=255, null=False)
    class Meta:
        database = db
# 连接到数据库
db.connect()
# 创建表(如果表不存在)
db.create_tables([MyElsaTable])
# 关闭数据库连接(在 Peewee 中,通常不需要显式关闭连接,因为它会自动管理连接池)
db.close()
print("Table myelsa_table created successfully!")
1-4、用SQLAlchemy库
from sqlalchemy import create_engine, Column, Integer, String, MetaData
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# 数据库连接配置(使用 SQLAlchemy 的 URI 格式)
DATABASE_URI = 'mysql+pymysql://root:123456@127.0.0.1/test_database?charset=utf8mb4'
# 创建一个引擎实例
engine = create_engine(DATABASE_URI, echo=True)  # echo=True 用于显示生成的 SQL 语句,调试时可以打开
# 创建基类
Base = declarative_base()
# 定义模型类
class MyElsaTable(Base):
    __tablename__ = 'myelsa_table'
    name = Column(String(255), nullable=False)
    ID_Card = Column(String(255), primary_key=True)  # 设置为主键
    age = Column(Integer, nullable=False)
    city = Column(String(255), nullable=False)
# 创建表(如果表不存在)
Base.metadata.create_all(engine)
# 如果你想要使用 ORM 来进行操作,可以创建一个 session 类
Session = sessionmaker(bind=engine)
session = Session()
# 这里不需要执行 SQL 语句或提交更改,因为 create_all 方法会自动处理
# 关闭 session(如果需要的话,但在这种情况下我们并没有进行任何 ORM 操作)
# session.close()
print("Table myelsa_table created successfully!")

2、删除

        在MySQL服务器上已有数据库test_database,且该数据库下已有数据表myelsa_table,现需删除数据表myelsa_table,以下为借助第三方库实现:

2-1、用mysql-connector-python库
import mysql.connector
# 数据库连接配置
config = {
    'user': 'root',  # 替换为你的MySQL用户名
    'password': '123456',  # 替换为你的MySQL密码
    'host': '127.0.0.1',  # 如果数据库在远程服务器上,请替换为相应的主机名或IP地址
    'database': 'test_database',  # 数据库名
}
try:
    # 连接到数据库
    cnx = mysql.connector.connect(**config)
    cursor = cnx.cursor()
    # 执行SQL语句来删除表
    drop_table_query = "DROP TABLE IF EXISTS myelsa_table;"
    cursor.execute(drop_table_query)
    # 提交更改(在这个例子中,删除表不需要显式提交,因为不是事务的一部分)
    # 但如果你之前做了其他更改,这里可以调用
    cnx.commit()
    print("Table myelsa_table deleted successfully!")
except mysql.connector.Error as err:
    print(f"Error: '{err}'")
finally:
    # 关闭游标和连接
    if cursor:
        cursor.close()
    if cnx.is_connected():
        cnx.close()
2-2、用PyMySQL库
import pymysql
# 数据库连接配置
config = {
    'user': 'root',  # 替换为你的MySQL用户名
    'password': '123456',  # 替换为你的MySQL密码
    'host': '127.0.0.1',  # 如果数据库在远程服务器上,请替换为相应的主机名或IP地址
    'database': 'test_database',  # 数据库名
    'charset': 'utf8mb4',  # 设置字符集,可选
    'cursorclass': pymysql.cursors.DictCursor  # 使用字典游标,可选
}
try:
    # 连接到数据库
    connection = pymysql.connect(**config)
    with connection.cursor() as cursor:
        # 执行SQL语句来删除表
        drop_table_query = "DROP TABLE IF EXISTS myelsa_table;"
        cursor.execute(drop_table_query)
    # 提交更改(在这个例子中,删除表不需要显式提交,因为不是事务的一部分)
    # 但如果你之前做了其他更改,并且它们是在一个事务中,这里可以调用 connection.commit()
    print("Table myelsa_table deleted successfully!")
except pymysql.MySQLError as err:
    print(f"Error: '{err}'")
finally:
    # 关闭连接
    if connection.open:
        connection.close()
2-3、用PeeWee库
# 注意,这里需要借助扩展库peewee-mysql,需提前安装
from peewee import *
# 数据库连接配置  
db = MySQLDatabase(
    'test_database',
    user='root',
    password='123456',
    host='127.0.0.1'
)
try:
    # 连接到数据库  
    db.connect()
    # 创建一个用于执行原始 SQL 的游标  
    db.execute_sql("DROP TABLE IF EXISTS myelsa_table;")
    # Peewee 没有直接的“提交”操作,因为对于 DDL(数据定义语言)语句如 DROP TABLE,  
    # 它们通常是立即执行的,不需要事务提交。  
    print("Table myelsa_table deleted successfully!")
except peewee.OperationalError as e:
    print(f"Error: '{e}'")
finally:
    # 关闭数据库连接  
    db.close()
2-4、用SQLAlchemy库
from sqlalchemy import create_engine, MetaData, Table
# 数据库连接配置
config = {
    'user': 'root',  # 替换为你的MySQL用户名
    'password': '123456',  # 替换为你的MySQL密码
    'host': '127.0.0.1',  # 如果数据库在远程服务器上,请替换为相应的主机名或IP地址
    'database': 'test_database',  # 数据库名
    'dialect': 'mysql'  # 使用mysql方言
}
# 创建连接字符串
connection_string = f"{config['dialect']}+pymysql://{config['user']}:{config['password']}@{config['host']}/{config['database']}"
try:
    # 创建引擎
    engine = create_engine(connection_string)
    # 使用引擎连接到数据库
    with engine.connect() as conn:
        # 创建元数据对象
        metadata = MetaData()
        # 定义要删除的表(如果已知表结构,可以创建完整的 Table 对象)
        # 但为了简单地删除表,我们只需要表名
        table_name = 'myelsa_table'
        # 使用 SQLAlchemy 的反射机制来获取 Table 对象(如果需要)
        # 这里我们直接执行原始 SQL 语句来删除表
        # 执行SQL语句来删除表
        drop_table_query = f"DROP TABLE IF EXISTS {table_name};"
        conn.execute(drop_table_query)
        print("Table myelsa_table deleted successfully!")
except Exception as e:
    print(f"Error: '{e}'")
    # 在 with 语句结束后,连接会自动关闭,所以不需要显式关闭连接

三、推荐阅读

1、Python函数之旅

2、Python算法之旅

3、博客个人主页

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes常用命令

目录 一.资源管理办法 1.陈述式资源管理方法 (1)kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口 (2)kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将用户在…

python+pytest+pytest-html+allure集成测试案例

pythonpytestpytest-htmlallure集成测试案例 下面是pythonpytestpytest-htmlallure四个组件同时集成使用的简单案例。 1. 项目结构 project/│├── src/│ ├── __init__.py│ ├── main.py│├── tests/│ ├── __init__.py│ ├── conftest.py│ └──…

MySQL主从复制(二):高可用

正常情况下, 只要主库执行更新生成的所有binlog, 都可以传到备库并被正确地执行, 备库就能达到跟主库一致的状态, 这就是最终一致性。 但是, MySQL要提供高可用能力, 只有最终一致性是不够的。 双M结构的…

用Python代码批量提取PDF文件中的表格

PDF文档中常常包含大量数据,尤其是官方报告、学术论文、财务报表等文档,往往包含了结构化的表格数据。表格作为承载关键信息的载体,其内容的准确提取对于数据分析、研究论证乃至业务决策具有重大意义。然而,PDF格式虽保证了文档的…

STM32——DAC篇(基于f103)

技术笔记! 一、DAC简介(了解) 1.1 DAC概念 传感器信号采集改变电信号,通过ADC转换成单片机可以处理的数字信号,处理后,通过DAC转换成电信号,进而实现对系统的控制。 1.2 DAC的特性参数 1.3…

你以为的私域是真正的私域嘛??你的私域流量真的属于你嘛?

大家好 我是一个软件开发公司的产品经理 专注私域电商行业7年有余 您的私域流量是真正的属于你自己嘛? 私域的定义 私域的界定:一个互联网私有数据(资产)积蓄的载体。这个载体的数据权益私有,且具备用户规则制定权…

继承和多态

目录: 1. 继承 2. 多态: 转型 重写 正文: 1. 继承: 观察以下代码: 我们发现Cat类和Dog类中有许多相同的属性,那不妨思考一下是否能有一种办法能把它们的相同点都归结到一块儿呢? 当然有,它就…

【html】网页布局模板01---简谱风

模板效果: 这是一种最简单,最干净的一种网页布局。 模板介绍: 模板概述: 这个模板是一个基础的网页布局模板,包括一个头部区域(header),其中包含网站标题(logo)和导航菜单(nav),以及一个页脚区域(copy),用于显示版权信息。整体布局简洁明了,适合作为各种类…

构建全面的无障碍学习环境:科技之光,照亮学习之旅

在信息与科技日益发展的当下,为所有人群提供一个包容和平等的学习环境显得尤为重要,特别是对于盲人朋友而言,无障碍学习环境的构建成为了一项亟待关注与深化的课题。一款名为“蝙蝠避障”的辅助软件,以其创新的设计理念与实用功能…

贪心算法--区间调度问题

贪心算法 引言 贪心算法是一种简单而有效的算法设计技巧,在解决一些优化问题时具有广泛的应用。其基本思想是通过每一步的局部最优选择,最终达到全局最优解。贪心算法通常不会回溯之前的决策,而是根据当前状态作出最优决策,因此…

d20(184-190)-勇敢开始Java,咖啡拯救人生

目录 网络通信 网络通信三要素(IP地址,端口号,协议 IP地址 InetAddress 端口号 协议 传输层的两个通信协议 UDP通信 java.net.Datagramsocket类 客户端 服务端 UDP通信多收多发 客户端 服务端 TCP通信 java.net.Socket类 客…

UWA DAY 2024 正式启动|创新潜藏无限可能

备受期待的UWA DAY 2024即将盛大开幕!由侑虎科技UWA主办的这场年度游戏开发者大会,以“创新潜藏无限可能”为主题,致力于为游戏开发者呈现最前沿的技术盛宴。 大会定于2024年9月7日至9月8日(周六、周日)在上海举行&am…

YOLOv9改进策略 | 图像去雾 | 利用图像去雾网络UnfogNet辅助YOLOv9进行图像去雾检测(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是利用UnfogNet超轻量化图像去雾网络,我将该网络结合YOLOv9针对图像进行去雾检测(也适用于一些模糊场景),我将该网络结构和YOLOv9的网络进行结合同时该网络的结构的参数量非常的小,我们将其添加到模型里增加的计算量和参数量基本可…

【R语言】ggplot中点的样式shape参数汇总

ggplot中点的样式展示&#xff1a; library(ggplot2)# 创建数据框 a<- data.frame(x 0:25, y 0:25) # 创建散点图 ggplot(a, aes(x x, y y, shape as.factor(y))) geom_point(size 4) scale_shape_manual(values 0:25) labs(shape "形状") theme(legend.…

k8s二进制安装与部署

目录 一、实验目的 二、实验环境 三、实验步骤 3.1 操作系统初始化配置 3.2 部署 docker引擎 3.3 部署 etcd 集群 3.3.1 在 master01 节点上操作 ​3.3.2 在 node01 节点上操作 3.3.3 在 node02 节点上操作 3.4 部署 Master 组件 3.4.1 在 mast…

【QT实战】汇总导航

✨Welcome 大家好&#xff0c;欢迎来到瑾芳玉洁的博客&#xff01; &#x1f611;励志开源分享诗和代码&#xff0c;三餐却无汤&#xff0c;顿顿都被噎。 &#x1f62d;有幸结识那个值得被认真、被珍惜、被捧在手掌心的女孩&#xff0c;不出意外被敷衍、被唾弃、被埋在了垃圾堆…

EN6347QI 开关稳压器 4A 贴片QFN-38 参数资料 应用案例 相关型号

EN6347QI 是一款直流/直流开关转换器。它是一款高效率的 buck (降压) 转换器&#xff0c;内置了电感器&#xff0c;能够提供高达 4A 的输出电流。其工作电压范围为 4.5V 至 12V&#xff0c;输出电压可调&#xff0c;最高可达 15V。EN6347QI 适合于各种电子设备中&#xff0c;用…

C#学习指南:重要内容与实用技巧

学习C#编程是一段充满挑战但又非常充实的旅程。以下是我在学习过程中积累的一些经验&#xff0c;希望能对大家有所帮助。 一、掌握基础概念 类及其成员 C#中的类是编程的基础模块。理解类的结构、属性、方法和构造函数是至关重要的。每个类都有其特定的功能&#xff0c;学会如…

【Linux网络编程】IO多种转接之Reactor

Reactor 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 基于上一篇epoll的学习&#xff0c;现在我们也知道epoll的工作模式有两种&#xff0c…

JavaScript Window对象

一、BOM&#xff08;浏览器对象模型&#xff09; window对象是一个全局对象&#xff0c;也可以说是JavaScript中的顶级对象。 像document、alert()、console.log()这些都是window的属性&#xff0c;基本BOM的属性和方法都是window的。 所有通过var定义在全局作用域中的变量、…