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 = db
        table_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:
    # 关闭Session
    session.close()

二、推荐阅读

1、Python函数之旅

2、Python算法之旅

3、博客个人主页

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

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

相关文章

力扣HOT100 - 21. 合并两个有序链表

解题思路&#xff1a; class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {ListNode dum new ListNode(0), cur dum;while (list1 ! null && list2 ! null) {if (list1.val < list2.val) {cur.next list1;list1 list1.next;} els…

力扣刷题---3146. 两个字符串的排列差

题目描述 给你两个字符串 s 和 t&#xff0c;每个字符串中的字符都不重复&#xff0c;且 t 是 s 的一个排列。 排列差 定义为 s 和 t 中每个字符在两个字符串中位置的绝对差值之和。 返回 s 和 t 之间的 排列差 。 示例 1&#xff1a; 输入&#xff1a;s “abc”, t “b…

四万字长文详解——node.js使用移动云,EOS对象存储

目录 前言 安装及安装前的操作 前置条件 如何创建认证信息 使用npm安装SDK开发包 安装开发包命令 初始化操作 存储桶 查看结果命令 查看桶列表 查看结果命令 删除桶 查看结果命令 创建桶 获取桶列表 判断桶是否存在 查询桶所属地域 查询桶的访问权限 管理桶的…

基于springboot+vue+Mysql的校园台球厅人员与设备管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

【C语言】冒泡排序详解

前言 排序&#xff0c;就是将一组数据按特定的规则调换位置&#xff0c;使这组数据具有某种顺序关系&#xff0c;一般就是递增或递减。 在接触C语言不久&#xff0c;我们就会遇到其中一种有名的排序算法——“冒泡排序”&#xff0c;不知道你是否已经掌握了&#xff0c;如果还…

2024最新 Jenkins + Docker 实战教程(五)- 配置Gitee Webhooks实现自动构建部署

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

等保建设:打造MySQL数据库审计系统

1、建设目标 在等级保护三级->应用安全->安全审计中强制需要有审计平台(满足对操作系统、数据库、网络设备的审计&#xff0c;在条件不允许的情况下&#xff0c;至少要使用数据库审计) 数据库审计服务符合等级保护三级标准&#xff0c;帮助您满足合规性要求&#xff0c;…

什么是组态?什么是工业控制中的组态软件?

随着工业4.0和智能制造的发展&#xff0c;工控软件的应用越来越广泛&#xff0c;它们在提高生产效率、降低能耗和减少人力成本等方面发挥着越来越重要的作用。 什么是工控软件&#xff1f; 工控软件是指用于工业控制系统的软件&#xff0c;主要应用于各种生产过程控制、自动化…

Java中流的概念细分

按流的方向分类&#xff1a; 输入流&#xff1a;数据流向是数据源到程序&#xff08;以InputStream、Reader结尾的流&#xff09;。 输出流&#xff1a;数据流向是程序到目的地&#xff08;以OutputStream、Writer结尾的流&#xff09;。 按处理的数据单元分类&#xff1a; 字…

在winnas中使用docker desktop遇到的问题及解决方法记录

最近在尝试从群晖转向winnas&#xff0c;一些简单的服务依然计划使用docker来部署。群晖的docker简单易用且稳定&#xff0c;在win上使用docker desktop过程中遇到了不少问题&#xff0c;在此记录一下以供后来人参考。 一、安装docker desktop后启动时遇到无法启动docker引擎 …

构建数字未来:探索Web3在物联网中的新视角

引言 随着Web3时代的来临&#xff0c;物联网技术正迎来一场新的变革。在这个数字化时代&#xff0c;Web3所带来的技术创新将为物联网的发展开辟新的视角。本文将深入探讨Web3在物联网领域的应用&#xff0c;揭示其在构建数字未来中的重要性和影响。 Web3与物联网的融合 区块链…

运用HTML、CSS设计Web网页——“西式甜品网”图例及代码

目录 一、效果展示图 二、设计分析 1.整体效果分析 2.头部header模块效果分析 3.导航及banner模块效果分析 4.分类classify模块效果分析 5.产品展示show模块效果分析 6.版权banquan模块效果分析 三、HTML、CSS代码分模块展示 1. 头部header模块代码 2.导航及bann…

QQ个性网空间日志网站模板源码

QQ个性网空间日志网站模板源码自带后台登录设置&#xff0c;适用于博客、文章、资讯、其他类网站内容使用。模板自带eyoucms内核&#xff0c;原创设计、手工书写DIVCSS&#xff0c;完美兼容IE7、Firefox、Chrome、360浏览器等;主流浏览器;结构容易优化;多终端均可正常预览。由于…

保安维稳,四信以科技构筑高速公路安全智慧防线

近日&#xff0c;广东梅大高速发生严重塌方事故&#xff0c;造成了严重的人员伤亡和财产损失。这一事件在公众心中敲响了安全的警钟&#xff0c;再次引起了公众对于交通设施运营安全性的重点关注。 国务院安委会办公室和国家防灾减灾救灾委员会办公室等主管机构先后印发紧急通知…

FuTalk设计周刊-Vol.053

#AI漫谈 热点捕手 1.Midjourney推出新功能Room 用户可在聊天室中一起创作图像 Midjourney最近推出了一个有趣的新功能——Room&#xff0c;为用户提供了一个协作和社交平台&#xff0c;用户可以一起创建和分享图像&#xff0c;并参与实时聊天。Room促进了用户之间的互动和合作…

Mujava 工具的简单使用

首先下载openjava.jar和mujava.jar&#xff0c;以及自己手写一个mujava.config指向存放mujava的目录&#xff0c;并将这些文件放在mujava目录下。此时&#xff0c;基本的mujava环境就搭建好了。 分别创建src&#xff08;存放源码文件&#xff09;、classes&#xff08;存放源码…

excel poi的titleRows 和 headRows含义

titleRows 这个参数的意思是&#xff1a;excel标题占多少行&#xff0c;而不是第几行headRows 这个参数的意思是&#xff1a;excel表头占几行&#xff0c;而不是第几行&#xff08;多行的意思是合并的行数&#xff09; 比如有一个excel如下&#xff0c;1-2行是标题&#xff0c…

webstorm新建vue项目相关问题

前言 这个迭代后端需求偏少&#xff0c;前端code的键盘都起火星子了。来了4个外包支持&#xff0c;1个后端3个前端&#xff0c;还是不够用啊。刚好趁这个机会稍微学习下vue&#xff0c;其实之前环境也配置过了&#xff0c;所以这里就不分享环境配置了&#xff0c;主要分享下新建…

Orangepi Zero2 linux系统摄像头设备文件名固定

文章目录 1. 寻找设备规则2. 使用udev规则修改挂载设备文件名称 问题&#xff1a; 在多次插拔usb摄像头或者在使用中不小心碰到或松了会导致设备文件名称变化&#xff0c;如从/dev/video1和/dev/video2变为/dev/video2和/dev/video3, 所以每次发生变化后都要充型修改代码或者重…

安全访问python字典:避免空键错误的艺术

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、直接访问字典键的问题 三、使用get方法安全访问字典键 四、get方法的实际应…