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库
3、修改记录
3-1、用mysql-connector-python库
3-2、用PyMySQL库
3-3、用PeeWee库
3-4、用SQLAlchemy库
4、查询记录
4-1、用mysql-connector-python库
4-2、用PyMySQL库
4-3、用PeeWee库
4-4、用SQLAlchemy库
二、推荐阅读
1、Python函数之旅
2、Python算法之旅
3、博客个人主页



一、数据表操作
在MySQL服务器上已有数据库test_database,且该数据库下已有数据表myelsa_table,此数据表包含4个字段:name,ID_Card,age,city,现借助第三方库对该数据表进行增、删、改、查等操作。
1、新增记录
1-1、用mysql-connector-python库
import mysql.connector
# 数据库连接配置
config = {'username': 'root', # 替换为你的MySQL用户名'password': '123456', # 替换为你的MySQL密码'host': '127.0.0.1', # 如果数据库在远程服务器上,请替换为相应的主机名或IP地址'database': 'test_database', # 数据库名
}
# 定义要插入的数据
new_record = {'name': 'Myelsa','ID_Card': '443689564710526448','age': 18,'city': 'Guangzhou'
}
# SQL插入语句
insert_query = """
INSERT INTO myelsa_table (name, ID_Card, age, city)
VALUES (%s, %s, %s, %s)
"""
try:# 连接到数据库cnx = mysql.connector.connect(**config)cursor = cnx.cursor()# 执行SQL插入语句cursor.execute(insert_query, (new_record['name'], new_record['ID_Card'], new_record['age'], new_record['city']))# 提交更改cnx.commit()print("Record inserted successfully!")
except mysql.connector.Error as err:print(f"Error: '{err}'")
finally:# 关闭游标和连接if cursor:cursor.close()if cnx.is_connected():cnx.close()
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 # 使用字典游标以便轻松访问列名
}
# 定义要插入的数据
new_record = {'name': 'Myelsa','ID_Card': '443689564710526448','age': 18,'city': 'Guangzhou'
}
# SQL插入语句
insert_query = """
INSERT INTO myelsa_table (name, ID_Card, age, city)
VALUES (%s, %s, %s, %s)
"""
try:# 连接到数据库cnx = pymysql.connect(**config)with cnx.cursor() as cursor:# 使用with语句确保游标在使用完毕后被关闭# 执行SQL插入语句cursor.execute(insert_query, (new_record['name'], new_record['ID_Card'], new_record['age'], new_record['city']))# 提交更改cnx.commit()print("Record inserted successfully!")
except pymysql.Error as err:print(f"Error: '{err}'")
# 使用with语句连接数据库时,在with块结束后连接将自动关闭
# 如果没有使用with语句,需要显式关闭连接
if cnx.open:cnx.close()
1-3、用PeeWee库
from peewee import *
# 数据库连接配置
db = MySQLDatabase('test_database', user='root', password='123456', host='127.0.0.1')
# 定义模型
class MyelsaTable(Model):name = CharField()ID_Card = CharField()age = IntegerField()city = CharField()class Meta:database = dbtable_name = 'myelsa_table'
# 连接到数据库
db.connect()
# 创建表(如果尚不存在)
db.create_tables([MyelsaTable])
# 插入数据
new_record = {'name': 'Myelsa','ID_Card': '443689564710526448','age': 18,'city': 'Guangzhou'
}
try:MyelsaTable.create(name=new_record['name'],ID_Card=new_record['ID_Card'],age=new_record['age'],city=new_record['city'])print("Record inserted successfully!")
except IntegrityError as e:print(f"Error: '{e}'")
finally:# 关闭数据库连接db.close()
1-4、用SQLAlchemy库
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy.exc import SQLAlchemyError
# 定义基类
Base = declarative_base()
# 定义数据库模型类
class MyElsaTable(Base):__tablename__ = 'myelsa_table'ID_Card = Column(String, primary_key=True)name = Column(String)age = Column(Integer)city = Column(String)def __repr__(self):return f"<MyElsaTable(ID_Card={self.ID_Card}, name={self.name}, age={self.age}, city={self.city})>"
# 数据库连接配置
config = {'username': 'root', # 替换为你的MySQL用户名'password': '123456', # 替换为你的MySQL密码'host': '127.0.0.1', # 如果数据库在远程服务器上,请替换为相应的主机名或IP地址'database': 'test_database', # 数据库名
}
# 创建数据库引擎
engine = create_engine(f'mysql+pymysql://{config["username"]}:{config["password"]}@{config["host"]}/{config["database"]}')
# 确保所有表都已创建(可选)
Base.metadata.create_all(engine)
# 创建会话类
Session = sessionmaker(bind=engine)
# 定义要插入的数据
new_record = {'name': 'Myelsa','ID_Card': '443689564710526448','age': 18,'city': 'Guangzhou'
}
try:# 使用上下文管理器自动管理会话with Session() as session:# 创建新的模型实例new_entry = MyElsaTable(**new_record)# 将新实例添加到会话中session.add(new_entry)# 提交更改session.commit()print("Record inserted successfully!")
except SQLAlchemyError as e:print(f"Error: '{e}'")# 在使用上下文管理器时,无需显式回滚,因为上下文管理器会在退出时处理它
2、删除记录
2-1、用mysql-connector-python库
import mysql.connector
# 数据库连接配置
config = {'username': 'root', # 替换为你的MySQL用户名'password': '123456', # 替换为你的MySQL密码'host': '127.0.0.1', # 如果数据库在远程服务器上,请替换为相应的主机名或IP地址'database': 'test_database', # 数据库名
}
# 要删除的记录的ID_Card值
id_card_to_delete = '443689564710526448'
# SQL删除语句
delete_query = """
DELETE FROM myelsa_table
WHERE ID_Card = %s
"""
try:# 连接到数据库cnx = mysql.connector.connect(**config)cursor = cnx.cursor()# 执行SQL删除语句cursor.execute(delete_query, (id_card_to_delete,))# 提交更改cnx.commit()print(f"Record with ID_Card '{id_card_to_delete}' 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 # 使用字典游标(虽然在这个删除操作中不是必需的)
}
# 要删除的记录的ID_Card值
id_card_to_delete = '443689564710526448'
# SQL删除语句
delete_query = """
DELETE FROM myelsa_table
WHERE ID_Card = %s
"""
try:# 连接到数据库cnx = pymysql.connect(**config)with cnx.cursor() as cursor:# 使用with语句确保游标在使用完毕后被关闭# 执行SQL删除语句cursor.execute(delete_query, (id_card_to_delete,))# 提交更改cnx.commit()print(f"Record with ID_Card '{id_card_to_delete}' deleted successfully!")
except pymysql.Error as err:print(f"Error: '{err}'")
# 使用with语句连接数据库时,在with块结束后连接将自动关闭
# 如果没有使用with语句,需要显式关闭连接
if cnx.open:cnx.close()
2-3、用PeeWee库
from peewee import *
# 数据库连接配置
db = MySQLDatabase('test_database', user='root', password='123456', host='127.0.0.1')
# 定义模型,映射到myelsa_table表
class Myelsa_Table(Model):name = CharField()ID_Card = CharField(unique=True) # 假设ID_Card是唯一的age = IntegerField()city = CharField()class Meta:database = db
# 连接到数据库
db.connect()
# 要删除的记录的ID_Card值
id_card_to_delete = '443689564710526448'
try:# 使用模型来删除记录query = Myelsa_Table.delete().where(Myelsa_Table.ID_Card == id_card_to_delete)query.execute()print(f"Record with ID_Card '{id_card_to_delete}' deleted successfully!")
except Exception as e:print(f"Error: '{e}'")
finally:# 关闭数据库连接(Peewee会在连接池中管理连接,通常不需要显式关闭)# 但如果你确定不再需要连接,可以调用db.close()# db.close()pass
# 注意:在实际应用中,通常不需要显式关闭连接,因为Peewee会管理连接池
# 但在某些情况下,例如脚本结束时,你可能想要确保所有资源都被释放
2-4、用SQLAlchemy库
from sqlalchemy import create_engine, Column, Integer, String, MetaData, Table
from sqlalchemy.orm import sessionmaker
from sqlalchemy.exc import SQLAlchemyError
# 数据库连接配置
config = {'username': 'root', # 替换为你的MySQL用户名'password': '123456', # 替换为你的MySQL密码'host': '127.0.0.1', # 如果数据库在远程服务器上,请替换为相应的主机名或IP地址'database': 'test_database', # 数据库名'port': 3306, # 如果端口不是默认的3306,请添加此行并替换为正确的端口
}
# 创建数据库引擎
engine = create_engine(f'mysql+pymysql://{config["username"]}:{config["password"]}@{config["host"]}:{config["port"]}/{config["database"]}')
# 要删除的记录的ID_Card值
id_card_to_delete = '443689564710526448'
# 定义元数据(如果使用ORM,则无需此步骤,但这里为简单起见使用Table对象)
metadata = MetaData()
myelsa_table = Table('myelsa_table', metadata, autoload_with=engine)
# 创建会话类
Session = sessionmaker(bind=engine)
try:# 创建会话对象session = Session()# 执行SQL删除语句(这里使用session.execute而不是ORM方法)session.execute(myelsa_table.delete().where(myelsa_table.c.ID_Card == id_card_to_delete))# 提交更改session.commit()print(f"Record with ID_Card '{id_card_to_delete}' deleted successfully!")
except SQLAlchemyError as e:print(f"Error: '{e}'")# 如果出错,回滚更改session.rollback()
finally:# 关闭会话session.close()
3、修改记录
3-1、用mysql-connector-python库
import mysql.connector
# 数据库连接配置
config = {'username': 'root', # 替换为你的MySQL用户名'password': '123456', # 替换为你的MySQL密码'host': '127.0.0.1', # 如果数据库在远程服务器上,请替换为相应的主机名或IP地址'database': 'test_database', # 数据库名
}
# 要更新的记录的ID_Card值
id_card_to_update = '443689564710526448'
# 新的记录值
new_values = {'name': 'Jimmy','age': 15,'city': 'Foshan'
}
# SQL更新语句
update_query = """
UPDATE myelsa_table
SET name = %s, age = %s, city = %s
WHERE ID_Card = %s
"""
try:# 连接到数据库cnx = mysql.connector.connect(**config)cursor = cnx.cursor()# 执行SQL更新语句cursor.execute(update_query, (new_values['name'], new_values['age'], new_values['city'], id_card_to_update))# 提交更改cnx.commit()print(f"Record with ID_Card '{id_card_to_update}' updated successfully!")
except mysql.connector.Error as err:print(f"Error: '{err}'")
finally:# 关闭游标和连接if cursor:cursor.close()if cnx.is_connected():cnx.close()
3-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 # 虽然在更新操作中不是必需的,但这里保持一致
}
# 要更新的记录的ID_Card值
id_card_to_update = '443689564710526448'
# 新的记录值
new_values = {'name': 'Jimmy','age': 15,'city': 'Foshan'
}
# SQL更新语句
update_query = """
UPDATE myelsa_table
SET name = %s, age = %s, city = %s
WHERE ID_Card = %s
"""
try:# 连接到数据库cnx = pymysql.connect(**config)with cnx.cursor() as cursor:# 使用with语句确保游标在使用完毕后被关闭# 执行SQL更新语句cursor.execute(update_query, (new_values['name'], new_values['age'], new_values['city'], id_card_to_update))# 提交更改cnx.commit()print(f"Record with ID_Card '{id_card_to_update}' updated successfully!")
except pymysql.MySQLError as err:print(f"Error: '{err}'")
finally:
# 使用with语句时,连接会在with块结束时自动关闭
# 如果连接没有通过with管理,需要在这里关闭if cnx.open:cnx.close()
3-3、用PeeWee库
from peewee import *
# 定义数据库连接
db = MySQLDatabase('test_database', user='root', password='123456', host='127.0.0.1')
# 定义数据库模型类
class MyElsa_Table(Model):ID_Card = CharField(primary_key=True) # 注意:这里保留了你的原始字段命名name = CharField()age = IntegerField()city = CharField()class Meta:database = db
# 连接到数据库
db.connect()
# 要更新的记录的ID_Card值
id_card_to_update = '443689564710526448'
# 新的记录值
new_values = {'name': 'Jimmy','age': 15,'city': 'Foshan'
}
try:# 使用ORM方法执行更新操作query = (MyElsa_Table.update(name=new_values['name'], age=new_values['age'], city=new_values['city']).where(MyElsa_Table.ID_Card == id_card_to_update))query.execute()# 如果没有错误,打印成功消息print(f"Record with ID_Card '{id_card_to_update}' updated successfully!")
except Exception as e:# 捕获异常并打印错误信息print(f"Error: '{e}'")
finally:# 关闭数据库连接db.close()
3-4、用SQLAlchemy库
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.exc import SQLAlchemyError
# 数据库连接配置
config = {'username': 'root', # 替换为你的MySQL用户名'password': '123456', # 替换为你的MySQL密码'host': '127.0.0.1', # 如果数据库在远程服务器上,请替换为相应的主机名或IP地址'database': 'test_database', # 数据库名'port': 3306, # 如果端口不是默认的3306,请添加此行并替换为正确的端口'echo': False # 如果想看到执行的SQL语句,设置为True
}
# 创建数据库引擎
engine = create_engine(f'mysql+pymysql://{config["username"]}:{config["password"]}@{config["host"]}:{config["port"]}/{config["database"]}',echo=config['echo'])
# 定义元数据
metadata = MetaData()
# 假设你的表结构如下(需要根据实际情况调整列类型和名称)
myelsa_table = Table('myelsa_table', metadata,Column('ID_Card', String, primary_key=True),Column('name', String),Column('age', Integer),Column('city', String),autoload_with=engine)
# 要更新的记录的ID_Card值
id_card_to_update = '443689564710526448'
# 新的记录值
new_values = {'name': 'Jimmy','age': 15,'city': 'Foshan'
}
# 创建会话类
Session = sessionmaker(bind=engine)
try:# 创建会话对象session = Session()# 构造更新语句stmt = myelsa_table.update().where(myelsa_table.c.ID_Card == id_card_to_update).values(**new_values)# 执行更新session.execute(stmt)# 提交更改session.commit()print(f"Record with ID_Card '{id_card_to_update}' updated successfully!")
except SQLAlchemyError as e:print(f"Error: '{e}'")# 如果出错,回滚更改session.rollback()
finally:# 关闭会话session.close()
4、查询记录
4-1、用mysql-connector-python库
import mysql.connector
# 数据库连接配置
config = {'username': 'root', # 替换为你的MySQL用户名'password': '123456', # 替换为你的MySQL密码'host': '127.0.0.1', # 如果数据库在远程服务器上,请替换为相应的主机名或IP地址'database': 'test_database', # 数据库名
}
# 查询所有记录的SQL语句
query_all = """
SELECT * FROM myelsa_table
"""
# 查询特定记录的SQL语句(例如,根据ID_Card查询)
id_card_to_query = '443689564710526448'
query_by_id_card = """
SELECT * FROM myelsa_table WHERE ID_Card = %s
"""
try:# 连接到数据库cnx = mysql.connector.connect(**config)cursor = cnx.cursor()# 执行查询所有记录的SQL语句cursor.execute(query_all)# 获取所有记录for (name, id_card, age, city) in cursor:print(f"Name: {name}, ID Card: {id_card}, Age: {age}, City: {city}")# 如果需要查询特定记录,取消注释以下代码# cursor.execute(query_by_id_card, (id_card_to_query,))# record = cursor.fetchone()# if record:# (name, id_card, age, city) = record# print(f"Name: {name}, ID Card: {id_card}, Age: {age}, City: {city}")# else:# print(f"No record found for ID Card: {id_card_to_query}")
except mysql.connector.Error as err:print(f"Error: '{err}'")
finally:# 关闭游标和连接if cursor:cursor.close()if cnx.is_connected():cnx.close()
4-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 # 使用字典游标以便按列名访问数据
}
# 查询所有记录的SQL语句
query_all = """
SELECT * FROM myelsa_table
"""
# 查询特定记录的SQL语句(例如,根据ID_Card查询)
id_card_to_query = '443689564710526448'
query_by_id_card = """
SELECT * FROM myelsa_table WHERE ID_Card = %s
"""
try:# 连接到数据库cnx = pymysql.connect(**config)with cnx.cursor(pymysql.cursors.DictCursor) as cursor: # 使用with语句自动管理游标# 执行查询所有记录的SQL语句cursor.execute(query_all)# 获取所有记录for row in cursor:print(f"Name: {row['name']}, ID Card: {row['ID_Card']}, Age: {row['age']}, City: {row['city']}")# 如果需要查询特定记录,取消注释以下代码# cursor.execute(query_by_id_card, (id_card_to_query,))# record = cursor.fetchone()# if record:# print(f"Name: {record['name']}, ID Card: {record['ID_Card']}, Age: {record['age']}, City: {record['city']}")# else:# print(f"No record found for ID Card: {id_card_to_query}")# 注意:因为使用了with语句,所以不需要显式关闭游标# 提交(在这里其实不需要,因为只是查询)cnx.commit()except pymysql.MySQLError as err:print(f"Error: '{err}'")
finally:
# 使用with语句时,连接会在with块结束时自动关闭
# 如果连接没有通过with管理,需要在这里关闭if cnx.open:cnx.close()
4-3、用PeeWee库
from peewee import *
# 数据库连接配置
db = MySQLDatabase('test_database', user='root', password='123456', host='127.0.0.1')
# 定义数据库模型类
class MyElsa_Table(Model):ID_Card = CharField(primary_key=True)name = CharField()age = IntegerField()city = CharField()class Meta:database = db
# 连接到数据库
db.connect()
# 查询所有记录
def query_all_records():for record in MyElsa_Table.select():print(f"Name: {record.name}, ID Card: {record.ID_Card}, Age: {record.age}, City: {record.city}")
# 查询特定记录(根据ID_Card)
def query_record_by_id_card(id_card):record = MyElsa_Table.get_or_none(MyElsa_Table.ID_Card == id_card)if record:print(f"Name: {record.name}, ID Card: {record.ID_Card}, Age: {record.age}, City: {record.city}")else:print(f"No record found for ID Card: {id_card}")
# ID_Card要查询的特定值
id_card_to_query = '443689564710526448'
try:# 查询所有记录query_all_records()print("\n---\n")# 查询特定记录query_record_by_id_card(id_card_to_query)
except MyElsa_Table.DoesNotExist:print(f"No record found for ID Card: {id_card_to_query}")
except Exception as e:print(f"Error: '{e}'")
finally:# 关闭数据库连接(如果使用了连接池,则可能不需要显式关闭)db.close()
4-4、用SQLAlchemy库
from sqlalchemy import create_engine, Column, Integer, String, MetaData
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.exc import SQLAlchemyError
# 声明基础类
Base = declarative_base()
# 定义ORM模型
class MyElsaTable(Base):__tablename__ = 'myelsa_table'id_card = Column(String, primary_key=True)name = Column(String)age = Column(Integer)city = Column(String)
# 数据库连接配置
config = {'username': 'root', # 替换为你的MySQL用户名'password': '123456', # 替换为你的MySQL密码'host': '127.0.0.1', # 如果数据库在远程服务器上,请替换为相应的主机名或IP地址'database': 'test_database', # 数据库名'port': 3306, # 端口号,默认为3306'echo': False # 是否打印SQL语句
}
# 创建数据库引擎
engine = create_engine(f'mysql+pymysql://{config["username"]}:{config["password"]}@{config["host"]}:{config["port"]}/{config["database"]}',echo=config['echo'])
# 创建Session类
Session = sessionmaker(bind=engine)
try:# 创建Session对象session = Session()# 查询所有记录all_records = session.query(MyElsaTable).all()for record in all_records:print(f"Name: {record.name}, ID Card: {record.id_card}, Age: {record.age}, City: {record.city}")# 查询特定记录(例如,根据ID_Card查询)id_card_to_query = '443689564710526448'record = session.query(MyElsaTable).filter_by(id_card=id_card_to_query).first()if record:print(f"Name: {record.name}, ID Card: {record.id_card}, Age: {record.age}, City: {record.city}")else:print(f"No record found for ID Card: {id_card_to_query}")
except SQLAlchemyError as e:print(f"Error: '{e}'")
finally:# 关闭Sessionsession.close()
二、推荐阅读
1、Python函数之旅
2、Python算法之旅
3、博客个人主页
相关文章:
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库 3、修改记录 3-1、用mysql-conn…...
OceanBase SQL 诊断和调优实践——【DBA从入门到实践】第七期
数据库作为绝大多数应用系统储存数据的核心系统,在用户系统需要访问数据时,有着至关重要的作用。在这些交互中,SQL 语言是应用与数据库系统之间“沟通”的桥梁,它负责将应用的指令传达给数据库。因此,SQL 的性能好坏直…...
C++之std::is_trivially_copyable(平凡可复制类型检测)
目录 1.C基础回顾 1.1.平凡类型 1.2.平凡可复制类型 1.3.标准布局类型 2.std::is_trivially_copyable 2.1.定义 2.2.使用 2.3.总结 1.C基础回顾 在C11中,平凡类型(Trivial Type)、平凡可复制类型(TrivialCopyable&#x…...
宝石收集,tarjan
0宝石收集 - 蓝桥云课 (lanqiao.cn) nint(input()) s0input() mint(input()) mp[[] for i in range(n1)] for i in range(m):a,bmap(int,input().split())a1b1mp[a].append(b)import sys sys.setrecursionlimit(100000000) dfn[0 for i in range(n1)] low[0 for i in range(n1…...
python 面对对象 类 继承
继承 继承就是为了解决两个有大量重复性代码的类,抽象出一个更抽象的类放公共代码,主要是代码复用,方便代码的管理与修改 类的继承包括属性和方法,私有属性也可继承 class Person(): # 默认是继承object超类pass…...
Rust腐蚀怎么用服务器一键开服联机教程
1、进入控制面板 首次登陆需要点击下方重置密码,如何再点击登录面板,点击后会跳转到登录页面,输入用户名和密码登录即可 2、设置游戏端口 由于腐蚀的设置需要三个端口,它们用于游戏端口(必须为首选端口)&a…...
公共代理IP和独享代理IP之间的区别?
公共代理IP和独享代理IP在网络应用中扮演着不同的角色,它们之间的区别主要体现在使用方式、性能、安全性以及隐私保护等方面。以下是对这两种代理IP的详细对比和分析。 第一点就是使用的方式以及成本上的不同,公共代理IP,顾名思义࿰…...
基于Vue的前端自定义询问弹框与输入弹框组件的设计与实践
基于Vue的前端自定义询问弹框与输入弹框组件的设计与实践 摘要 随着技术的不断进步,前端开发面临越来越多的挑战,其中之一就是如何有效管理复杂的业务逻辑和用户体验。传统的整块应用开发方式在面对频繁的功能变更和用户体验优化时,往往显得…...
淘宝订单系统ERP中如何接入平台订单信息?(订单API)
淘宝开放平台中有交易API,里面有各种关于交易的API接口。但是申报应用权限的审核流程严格又漫长。不少公司费时费力的申请后,结果还是没有审批下来。 调用淘宝自定义接口custom,可以实现淘宝开放平台API的调用。技术人员会根据您需要的接口做…...
在Spring Boot项目中集成和使用MQTT
在物联网(IoT)应用中,MQTT(消息队列遥测传输)协议因其轻量级和高效性被广泛使用。在Spring Boot项目中,我们可以通过集成org.springframework.integration:spring-integration-mqtt依赖来实现对MQTT的支持。…...
14、设计模式之访问者模式
访问者模式 在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元…...
Excel如何换行不换格
在换行的字之间 按住Alt 回车...
Elasticsearch 8.1官网文档梳理 - 十五、Aggregations(聚合)
Aggregations ES 的聚合可以总结为三类:指标聚合、统计聚合、其他分析聚合。 Metric aggregations: 计算 field 的指标值,例如平均值、最大值、和等指标Bucket aggregations: 基于 field 的值、范围、或其他标准对 doc 分类&…...
计算机系统概论
目录 1. 计算机的分类 2. 计算机的发展简史 3. 计算机的硬件 1. 处理器(CPU) 2. 内存(Memory) 3. 存储设备 4. 输入输出设备 4. 计算机的软件 1. 软件的分类 1.1 系统软件 1.2 应用软件 2. 软件的特点 3. 软件开发 4…...
【Vue】diff 算法
diff的时机 当组件创建时,以及依赖的属性或数据变化时,会运行一个函数,该函数会做两件事: 运行_render生成一棵新的虚拟dom树(vnode tree),返回根节点运行_update,传入虚拟dom树的根节点,对新旧…...
Spring Boot 3.x 与 Spring Boot 2.x 的对比
Spring Boot 是 Java 开发领域的一个重要框架,它简化了基于 Spring 的应用开发。随着版本的不断更新,Spring Boot 提供了更多功能、更好的性能以及更简洁的配置。本文将详细对比 Spring Boot 3.x 和 Spring Boot 2.x,探讨它们之间的主要区别和…...
SSLError ClosedPoolError
分析日志 从您提供的日志文件内容来看,存在几个明显的问题导致了实例无法创建: SSL证书验证失败:日志中多次出现SSLError(SSLError(1, [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:897)),)错误。这表明客户端在尝试…...
勒索软件分析_Conti
0. Conti介绍 勒索软件即服务(Ransomware as a Service,RaaS)变体 Conti 推出还不到两年,已经进行了第七次迭代。Conti被证明是一种敏捷而熟练的恶意软件威胁,能够自主和引导操作,并具有无与伦比的加密速度…...
Linux系统如何通过编译方式安装python3.11.3
1.切换到/data 目录 cd /data 2.下载python源码Python-3.11.3.tgz wget https://www.python.org/ftp/python/3.11.3/Python-3.11.3.tgz tar -xzf Python-3.11.0.tgz cd Python-3.11.3 3.配置python的安装路径 和 执行openssl的路径 ./configure --prefix/usr/local/pyth…...
仿《Q极速体育》NBACBA体育直播吧足球直播综合体育直播源码
码名称:仿《Q极速体育》NBACBA体育直播吧足球直播综合体育直播源码 开发环境:帝国cms7.5 空间支持:phpmysql 仿《Q极速体育》NBACBA体育直播吧足球直播综合体育直播源码自动采集 - 我爱模板网源码名称:仿《Q极速体育》NBACBA体育直…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
