当前位置: 首页 > news >正文

「异步魔法:Python数据库交互的革命」(一)

Hi,我是阿佑,今天将和大家一块打开异步魔法的大门,进入Python异步编程的神秘领域,学习如何同时施展多个咒语而不需等待。了解asyncio的魔力,掌握Async SQLAlchemy和Tortoise-ORM的秘密,让你的数据库操作快如闪电!

文章目录

  • Python进阶之数据库交互详解
    • 1. 引言
      • 数据库在现代应用中的核心作用
      • Python进行数据库交互的重要性
    • 2. 背景介绍
      • 2.1 数据库基础概念
        • 关系型数据库与非关系型数据库概述
        • SQL语言基础
      • 2.2 Python数据库交互发展历程
        • 从DB-API到ORM的演变
    • 3. DB-API标准与使用
      • 3.1 DB-API介绍
        • 规范概览与兼容性说明
      • 3.2 实战示例:使用SQLite
        • 连接数据库
        • 执行SQL查询与事务处理
        • 参数化查询与错误处理
    • 4. SQLAlchemy:Python ORM详解
      • 4.1 SQLAlchemy核心组件
        • Engine与Session管理
        • ORM映射:`declarative_base`与`Table`对象
      • 4.2 CRUD操作实践
        • 创建(Create)
        • 查询(Read)
        • 更新(Update)
        • 删除(Delete)
      • 4.3 高级特性
        • 关系与关联表
        • 查询表达式与过滤条件
        • 事物与并发控制
    • 5. Django ORM与模型设计
      • 5.1 Django项目中的数据库配置
        • 设置数据库连接
        • 定义模型(Model)
      • 5.2 数据迁移与操作
        • 自动化的数据库迁移
        • 简洁的数据库操作API
      • 5.3 高级查询与聚合函数
        • QuerySet的高级用法
        • 聚合与分组功能
    • 6. 小结

Python进阶之数据库交互详解

1. 引言

今天,阿佑要带大家进入一个充满魔力的世界——Python数据库交互的世界。别担心,我保证这趟旅程既有趣又实用,就像在魔法学院学习如何使用魔杖一样。

数据库在现代应用中的核心作用

想象一下,如果你是一个魔法师,你的魔法书就是数据库。它记录着你所有的咒语和魔法,而且每次施法时,你都可以快速地查找和使用它们。在现代应用中,数据库扮演着类似的角色。无论是在线购物平台、社交媒体还是企业资源规划系统,数据库都是它们的核心,存储着海量的数据,让这些系统能够快速、准确地响应用户的需求。

Python进行数据库交互的重要性

现在,让我们来谈谈Python。Python是一种非常流行的编程语言,它简洁、易学且功能强大。当Python遇上数据库,就像是魔法师找到了他的魔杖——两者结合,可以创造出无限可能。Python进行数据库交互,可以让开发者轻松地与数据库进行沟通,执行各种数据操作,从而构建出功能强大的应用程序。

在这个引言部分,我们只是简单地介绍了数据库的重要性和Python在数据库交互中的作用。接下来,我们将深入探索Python与数据库交互的世界,学习如何使用Python来操作数据库,就像魔法师学习如何使用他的魔杖一样。准备好了吗?让我们开始这段神奇的旅程吧!

在这里插入图片描述

2. 背景介绍

2.1 数据库基础概念

让我们继续我们的魔法之旅。在开始施展魔法之前,我们需要了解一些基本概念。数据库,就像一个庞大的图书馆,里面藏有无数的书籍(数据)。这些书籍被分类存放,方便我们找到所需的知识。

关系型数据库与非关系型数据库概述

在魔法世界里,有两种主要的图书馆:一种是传统的图书馆,它们的书籍按照严格的分类系统排列,这就是关系型数据库。另一种是现代的图书馆,书籍的摆放更加自由,可以根据读者的兴趣和需求来组织,这就是非关系型数据库

关系型数据库使用表格来组织数据,表格之间通过关系(如外键)相互连接。它们非常适合处理结构化数据,就像魔法师按照元素、咒语和仪式来组织他们的魔法书。

非关系型数据库则更加灵活,它们可以存储各种格式的数据,如文档、图片、视频等。它们不需要固定的表格结构,就像一个充满创意和自由的图书馆,可以容纳任何形式的魔法书籍。

SQL语言基础

在魔法世界中,有一种语言可以让魔法师与他们的图书馆沟通,这就是SQL(结构化查询语言)。SQL是一种强大的语言,它允许魔法师查询、更新、插入和删除图书馆中的书籍(数据)。

2.2 Python数据库交互发展历程

从DB-API到ORM的演变

在Python的世界中,魔法师们(开发者)一直在寻找更高效的方式来与数据库图书馆沟通。最初,他们使用DB-API,这是一个简单的接口,允许Python与数据库进行基本的交互,就像使用简单的咒语与图书馆进行基本的沟通。

随着时间的推移,魔法师们发现他们需要更强大的工具来处理更复杂的任务。于是,ORM(对象关系映射)出现了。ORM就像一个高级的魔法,它允许魔法师用Python代码来操作数据库,而不需要编写复杂的SQL语句。这使得数据库操作变得更加直观和易于管理。


在这一章节,我们介绍了数据库的基本概念,以及Python与数据库交互的发展历程。下一章,我们将深入探讨DB-API标准及其在Python中的使用,就像学习如何使用更高级的魔法咒语一样。准备好了吗?让我们继续前进!

3. DB-API标准与使用

3.1 DB-API介绍

欢迎回到我们的Python魔法课程。今天,我们要学习的是DB-API,这是Python世界中与数据库图书馆沟通的基础咒语集。想象一下,你手中有一本古老的魔法书,里面记载着如何与数据库进行交流的秘诀。

规范概览与兼容性说明

DB-API是Python数据库访问的一个标准接口,就像是所有魔法师都必须遵守的魔法规则。无论你使用的是哪种数据库,SQLite、MySQL还是PostgreSQL,DB-API都提供了一套统一的方式来执行基本的数据库操作。这就像是无论你在哪个魔法学院学习,基本的咒语和施法手势都是相同的。

3.2 实战示例:使用SQLite

现在,让我们通过一个实际的例子来展示DB-API的魔力。我们将使用SQLite,这是一个轻量级的数据库,非常适合初学者和小型项目。想象一下,SQLite就像是一个随身携带的小魔法书,随时可以拿出来使用。

连接数据库

首先,我们需要连接到我们的数据库。这就像是打开你的魔法书,准备开始施法。

import sqlite3# 连接到SQLite数据库
# 如果文件不存在,会自动在当前目录创建一个数据库文件
conn = sqlite3.connect('my_magic_library.db')
print("已连接到魔法图书馆!")
执行SQL查询与事务处理

接下来,我们可以开始查询我们的魔法书了。在DB-API中,我们使用cursor对象来执行SQL命令。

# 创建一个cursor对象
cursor = conn.cursor()# 执行一个查询
cursor.execute("SELECT * FROM spells")# 获取查询结果
spells = cursor.fetchall()
for spell in spells:print(spell)# 提交事务
conn.commit()
参数化查询与错误处理

在施法时,我们要小心,不要念错咒语。在DB-API中,我们使用参数化查询来避免错误和SQL注入攻击。

# 参数化查询
spell_name = "Levitation"
cursor.execute("SELECT * FROM spells WHERE name=?", (spell_name,))
levitation_spell = cursor.fetchone()
print(f"找到了咒语: {levitation_spell[1]}")

如果施法出错了怎么办?DB-API提供了错误处理机制,就像是一个魔法防护罩,保护我们免受错误的侵害。

try:# 尝试执行一个错误的SQL语句cursor.execute("SELEC * FROM spells")
except sqlite3.Error as error:print("哎呀,施法出错了:", error)
finally:# 不管成功还是失败,都要关闭防护罩conn.close()print("防护罩已关闭,魔法图书馆已安全关闭。")

通过这个章节,我们学习了DB-API的基本概念和如何使用SQLite进行数据库操作。就像学会了如何使用基础的魔法咒语,你现在可以开始探索更高级的魔法了。下一章,我们将深入了解SQLAlchemy,这是一个强大的ORM工具,可以让你的数据库操作更加强大和灵活。准备好了吗?让我们继续前进,探索更多的魔法吧!
在这里插入图片描述

4. SQLAlchemy:Python ORM详解

4.1 SQLAlchemy核心组件

欢迎来到Python数据库魔法的下一课!今天我们要探索的是SQLAlchemy,这是一个强大的ORM(对象关系映射)库,它可以让你像操作Python对象一样轻松地操作数据库。想象一下,你有一个魔法棒,只需要轻轻一挥,就可以在数据库中创建、查询、更新和删除数据。

Engine与Session管理

在SQLAlchemy的世界中,Engine是你的魔法棒,它负责与数据库建立连接。而Session则是你的魔法助手,帮助你管理数据库事务。

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker# 创建一个Engine,连接到数据库
engine = create_engine('sqlite:///my_magic_library.db')# 创建Session类的实例
Session = sessionmaker(bind=engine)
session = Session()
ORM映射:declarative_baseTable对象

在ORM的世界里,你需要定义你的数据模型。declarative_base是你的魔法图纸,它允许你定义Python类来映射数据库表。

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, StringBase = declarative_base()class Spell(Base):__tablename__ = 'spells'id = Column(Integer, primary_key=True)name = Column(String)description = Column(String)def __repr__(self):return f"<Spell(name='{self.name}', description='{self.description}')>"

4.2 CRUD操作实践

CRUD代表创建(Create)、读取(Read)、更新(Update)和删除(Delete),这是数据库操作的基本四个动作。在SQLAlchemy中,这些操作变得非常简单。

创建(Create)
# 创建一个新的咒语
new_spell = Spell(name="Invisibility", description="Makes the caster invisible.")
session.add(new_spell)
session.commit()
print("咒语已添加到魔法图书馆!")
查询(Read)
# 查询所有的咒语
spells = session.query(Spell).all()
for spell in spells:print(spell)
更新(Update)
# 更新一个咒语的描述
spell_to_update = session.query(Spell).filter_by(name="Invisibility").first()
if spell_to_update:spell_to_update.description = "Makes the caster completely invisible."session.commit()print("咒语描述已更新!")
删除(Delete)
# 删除一个咒语
spell_to_delete = session.query(Spell).filter_by(name="Invisibility").first()
if spell_to_delete:session.delete(spell_to_delete)session.commit()print("咒语已从魔法图书馆中移除!")

4.3 高级特性

关系与关联表

在魔法世界中,咒语之间可能存在某种联系。SQLAlchemy允许你定义这些关系,就像连接不同的魔法书。

class Wizard(Base):__tablename__ = 'wizards'id = Column(Integer, primary_key=True)name = Column(String)spells = relationship("Spell", back_populates="wizard")Spell.wizard = relationship("Wizard", back_populates="spells")
查询表达式与过滤条件

SQLAlchemy提供了强大的查询表达式,让你可以轻松地过滤和排序数据。

# 查询名字包含'Fire'的咒语
fire_spells = session.query(Spell).filter(Spell.name.like('%Fire%')).all()
事物与并发控制

事务是数据库操作中非常重要的概念,它确保了数据的一致性和完整性。

# 开启一个新的事务
with session.begin():# 在这里执行你的数据库操作pass

通过这一章节,我们学习了SQLAlchemy的核心组件和如何进行CRUD操作,还探索了一些高级特性。就像掌握了更高级的魔法,你现在可以更有效地与数据库进行交互了。下一章,我们将进入Django的世界,看看它是如何处理ORM和模型设计的。准备好了吗?让我们继续我们的魔法之旅!

5. Django ORM与模型设计

5.1 Django项目中的数据库配置

嘿,魔法师们!欢迎来到Django的奇妙世界,在这里,我们将学习如何用Django ORM来施展我们的数据库魔法。Django,这个强大的框架,就像一个全功能的魔法塔,让我们的数据库操作变得既简单又强大。

设置数据库连接

首先,我们需要告诉Django我们的数据库图书馆在哪里。这就像是在魔法塔的地图上标记出图书馆的位置。

settings.py文件中,我们可以这样设置:

DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': 'my_magic_library.db',}
}

这段代码告诉Django,我们使用的是SQLite数据库,并且数据库文件叫做my_magic_library.db

定义模型(Model)

接下来,我们需要定义我们的魔法模型。在Django中,模型就像是数据库中的表格,它们定义了数据的结构。

from django.db import modelsclass Spell(models.Model):name = models.CharField(max_length=100)description = models.TextField()is_dark_arts = models.BooleanField(default=False)def __str__(self):return self.name

在这个例子中,我们定义了一个Spell模型,它有三个字段:name(咒语名称),description(咒语描述),以及is_dark_arts(是否属于黑魔法),最后一个字段默认为False

5.2 数据迁移与操作

自动化的数据库迁移

Django的迁移系统就像是魔法塔中的自动图书分类机,它可以帮助我们自动创建和更新数据库结构。

每当我们修改模型后,我们可以使用以下命令来生成迁移文件:

python manage.py makemigrations

然后,应用迁移来更新数据库:

python manage.py migrate
简洁的数据库操作API

Django ORM提供了一个非常简洁的API来操作数据库。我们可以像使用Python列表一样使用QuerySets。

# 获取所有的咒语
spells = Spell.objects.all()# 添加一个新的咒语
new_spell = Spell(name="Expelliarmus", description="Disarms the target.", is_dark_arts=False)
new_spell.save()# 更新咒语
spell_to_update = Spell.objects.get(name="Expelliarmus")
spell_to_update.description = "Disarms the target with a flash of light."
spell_to_update.save()# 删除咒语
spell_to_delete = Spell.objects.get(name="Expelliarmus")
spell_to_delete.delete()

5.3 高级查询与聚合函数

QuerySet的高级用法

Django的QuerySets提供了许多强大的方法来进行高级查询。

# 获取所有的黑魔法咒语
dark_spells = Spell.objects.filter(is_dark_arts=True)# 获取咒语名称按字母顺序排序的列表
sorted_spells = Spell.objects.order_by('name')
聚合与分组功能

Django ORM还支持聚合和分组功能,这让我们能够执行更复杂的数据库操作。

from django.db.models import Count# 统计每个类型的咒语数量
spell_counts = Spell.objects.values('is_dark_arts').annotate(total=Count('id'))
for spell_count in spell_counts:print(f"{spell_count['is_dark_arts']} spells: {spell_count['total']}")

通过这一章节,我们学习了如何在Django项目中配置数据库,定义模型,以及如何使用Django ORM进行数据库操作。Django的ORM就像是一个强大的魔法工具箱,让我们能够轻松地管理和操作数据。下一章,我们将探索异步数据库交互,这将使我们的数据库操作更加高效和快速。准备好了吗?让我们继续我们的魔法之旅,进入异步编程的神秘领域!
在这里插入图片描述

6. 小结

嗨,大家好!今天我们今天聊了一个特别酷炫的话题——Python数据库交互。这不仅仅是技术层面的交流,更像是一场魔法冒险,阿佑和大家一起探索了如何用Python施展数据库的异步魔法。下面就来简要回顾下些重点步骤吧!

首先,我们得明白数据库在现代应用中扮演的角色。想象一下,数据库就像是一本魔法书,里面记录着无数的咒语和魔法。无论是在线购物平台、社交媒体还是企业资源规划系统,数据库都是它们强大的后盾,存储着海量的数据,让这些系统能够快速、准确地响应用户的需求。

接下来,让我们看看Python在这场魔法中的作用。Python,这个简洁、易学且功能强大的编程语言,当它与数据库结合时,就像魔法师找到了他的魔杖。Python进行数据库交互,可以让开发者轻松地与数据库进行沟通,执行各种数据操作,构建出功能强大的应用程序。

在这场魔法之旅的起点,我们先来了解一些基础概念。数据库可以分为关系型和非关系型两种,关系型数据库就像是传统的图书馆,书籍按照严格的分类系统排列;而非关系型数据库则更加自由灵活,可以存储各种格式的数据。SQL语言则是魔法师与图书馆沟通的语言,它允许魔法师查询、更新、插入和删除图书馆中的书籍(数据)。

随着Python魔法师们对效率的追求,DB-API和ORM技术应运而生。DB-API是一个简单的接口,允许Python与数据库进行基本的交互,而ORM则像是一个高级的魔法,它允许魔法师用Python代码来操作数据库,而不需要编写复杂的SQL语句。

在实战中,我们以SQLite为例,学习了如何使用DB-API连接数据库、执行SQL查询与事务处理,以及参数化查询与错误处理。这就像是学会了如何使用基础的魔法咒语,为进一步探索更高级的魔法打下了基础。

SQLAlchemy作为Python中一个强大的ORM工具,让我们的操作变得更加强大和灵活。通过Engine与Session管理,以及使用declarative_base定义数据模型,我们可以轻松地进行CRUD操作,并探索了关系与关联表、查询表达式与过滤条件等高级特性。

当然,提到数据库交互,我们不能不提Django ORM。Django的ORM就像是一个全功能的魔法塔,让我们的数据库操作变得既简单又强大。在Django中,我们学习了如何设置数据库连接、定义模型,以及使用Django ORM进行数据库操作,包括自动化的数据库迁移和简洁的数据库操作API。

最后,我们即将进入异步编程的神秘领域,学习如何同时施展多个咒语而不需等待。这将使我们的数据库操作更加高效和快速,就像魔法师在施展多个魔法时,能够同时控制而不混乱。

总的来说,这场Python数据库交互的魔法之旅既充满挑战又充满乐趣。我们从基础概念学起,一步步掌握了DB-API、SQLAlchemy和Django ORM等强大的工具,最终将进入异步编程的新世界。

准备好了吗?让我们拿起魔杖,继续我们的魔法冒险,探索更多的未知领域吧!
我是阿佑,一个专注于把晦涩的技术讲得有趣的中二青年,欢迎持续关注!

相关文章:

「异步魔法:Python数据库交互的革命」(一)

Hi&#xff0c;我是阿佑&#xff0c;今天将和大家一块打开异步魔法的大门&#xff0c;进入Python异步编程的神秘领域&#xff0c;学习如何同时施展多个咒语而不需等待。了解asyncio的魔力&#xff0c;掌握Async SQLAlchemy和Tortoise-ORM的秘密&#xff0c;让你的数据库操作快如…...

探秘GPT-4o:从版本对比到技术能力的全面评价

随着人工智能技术的不断发展&#xff0c;自然语言处理领域的突破性技术——GPT&#xff08;Generative Pre-trained Transformer&#xff09;系列模型也在不断演进。最新一代的GPT-4o横空出世&#xff0c;引起了广泛的关注和讨论。在本文中&#xff0c;我们将对GPT-4o进行全面评…...

四川汇烁面试总结

自我介绍项目介绍、 目录 1.jdk和jre的区别&#xff1f; 2.一段代码的执行流程&#xff1f; 3.接口与抽象类的区别&#xff1f; 4.ArrayList与LinkList的区别&#xff1f; 5.对HashMap的理解? 6.常见的异常&#xff1f; 7.throw 和 throws 有什么区别&#xff1f; 8.…...

【小程序 按钮 表单 】

按钮 代码演示 xxx.wxml <view class"boss" hover-class"box"hover-start-time"2000"hover-stay-time"5000">测试文本<view hover-stop-propagation"true">子集</view><view>子集2</view>…...

高铁Wifi是如何接入的?

使用PC端的朋友&#xff0c;请将页面缩小到最小比例&#xff0c;阅读最佳&#xff01; 在飞驰的高铁上&#xff0c;除了窗外一闪而过的风景&#xff0c;你是否好奇过&#xff0c;高铁Wifi信号如何连接的呢&#xff1f; 远动的火车可不能连接光纤吧&#xff0c;难道是连接的卫星…...

gitlab之docker-compose汉化离线安装

目录 概述离线资源docker-compose结束 概述 gitlab可以去 hub 上拉取最新版本&#xff0c;在此我选择汉化 gitlab &#xff0c;版本 11.x 离线资源 想自制离线安装镜像&#xff0c;请稳步参考 docker镜像的导入导出 &#xff0c;无兴趣的直接使用在此提供离线资源 百度网盘(链…...

【算法】dd爱转转

✨题目链接&#xff1a; dd爱旋转 ✨题目描述 读入一个n∗n的矩阵&#xff0c;对于一个矩阵有以下两种操作 1:顺时针旋180 2:关于行镜像 如 变成 给出q个操作&#xff0c;输出操作完的矩阵 ✨输入描述: 第一行一个数n(1≤n≤1000)&#xff0c;表示矩阵大小 接下来n行&#xff…...

Python3 笔记:IDLE的几个基本设置

1、设置字体&#xff1a; Options > Configure IDLE > Fonts 2、设置文字颜色&#xff08;设置高亮&#xff09;&#xff1a; Options > Configure IDLE > Highlights 3、设置背景颜色&#xff1a; Options > Configure IDLE > Highlights 4、设置窗口&a…...

Mysql:存储过程练习

create table stu( id int(3) primary key auto_increment, name varchar(20) not null, grade float, gender char(2)); insert into stu(name,grade,gender) values(tom,60,男),(jack,70,男),(rose,90,女),(lucy,100,…...

详解Java ThreadLocal

个人博客 详解Java ThreadLocal | iwts’s blog Java ThreadLocal ThreadLocal提供了线程内存储变量的能力&#xff0c;这些变量不同之处在于每一个线程读取的变量是对应的互相独立的。通过get和set方法就可以得到当前线程对应的值。 TreadLocal存储模型 ThreadLocal的静态…...

Unable to parse response body for Response{requestLine=PUT

1 异常信息&#xff1a; Caused by: java.lang.RuntimeException: Unable to parse response body for Response{requestLinePUT /an_path_statistic_log/_doc/11?timeout1m HTTP/1.1, hosthttp://192.168.3.60:9200, responseHTTP/1.1 200 OK}at org.springframework.data.e…...

GitHub的原理及应用详解(六)

本系列文章简介&#xff1a; GitHub是一个基于Git版本控制系统的代码托管平台&#xff0c;为开发者提供了一个方便的协作和版本管理的工具。它广泛应用于软件开发项目中&#xff0c;包括但不限于代码托管、协作开发、版本控制、错误追踪、持续集成等方面。 GitHub的原理可以简单…...

基于PHP+MySQL组合开发的微信小程序分销商城源码系统 分销商城+积分商城+多商户 功能强大 带完整的安装代码包以及搭建教程

系统概述 在当今数字化商业时代&#xff0c;拥有一个强大而多功能的分销商城系统对于企业的发展至关重要。本文将重点介绍基于 PHPMySQL 组合开发的微信小程序分销商城源码系统&#xff0c;它融合了分销商城、积分商城和多商户等功能&#xff0c;不仅功能强大&#xff0c;还提…...

kafka-消费者组偏移量重置

文章目录 1、消费者组偏移量重置1.1、列出所有的消费者组1.2、查看 my_group1 组的详细信息1.3、获取 kafka-consumer-groups.sh 的帮助信息1.4、 偏移量重置1.5、再次查看 my_group1 组的详细信息 1、消费者组偏移量重置 1.1、列出所有的消费者组 [rootlocalhost ~]# kafka-…...

一书读懂Python全栈安全,剑指网络空间安全

写在前面 通过阅读《Python全栈安全/网络空间安全丛书》&#xff0c;您将能够全面而深入地理解Python全栈安全的广阔领域&#xff0c;从基础概念到高级应用无一遗漏。本书不仅详细解析了Python在网络安全、后端开发、数据分析及自动化等全栈领域的安全实践&#xff0c;还紧密贴…...

原生js实现拖拽改变元素顺序

代码展示如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title>…...

以果决其行,只为文化的传承

从他们每一个人的身上&#xff0c;我们看到传神的东西&#xff0c;就是他们都能用结果&#xff0c;去指引自己前进的方向&#xff0c;这正是我要解读倪海厦老师的原因&#xff0c;看倪海厦2012年已经去世&#xff0c;到现在已经十几年时间了&#xff0c;但是我们看现在自学中医…...

Flutter 中的 SizedOverflowBox 小部件:全面指南

Flutter 中的 SizedOverflowBox 小部件&#xff1a;全面指南 在 Flutter 的布局世界中&#xff0c;SizedOverflowBox 是一个相对独特的小部件&#xff0c;它允许子组件溢出其父组件的界限&#xff0c;同时保持父组件的尺寸不变。这在某些特定的布局场景下非常有用&#xff0c;…...

图像视频智能抹除修复解决方案,适应性强,应用广泛

行车录制、现场拍摄等过程中&#xff0c;往往会出现一些难以避免的瑕疵——遮挡物、无关人员、甚至是意外的光线变化&#xff0c;这些都可能影响到视频与图像的质量&#xff0c;降低其观赏性和专业性。 美摄科技&#xff0c;作为行业领先的图像视频智能处理专家&#xff0c;深…...

20240521(代码整洁和测试入门学习)

测试: 1.测试工程师、测试工具开发工程师、自动化测试工程师。 python&#xff1a; 1、发展背景和优势&#xff1b; 2、开始多需的工具 interpreter(解释器) refactor(重构) 2、变量和注释的基础语法 3、输入输出 i 1 for i in range(1, 11): print(i, end ) 不换行打印…...

git中忽略文件的配置

git中忽略文件的配置 一、在项目根目录下创建.gitignore文件二、配置规则如果在配置之前已经提交过文件了&#xff0c;要删除提交过的&#xff0c;如何修改&#xff0c;参考下面的 一、在项目根目录下创建.gitignore文件 .DS_Store node_modules/ /dist# local env files .env…...

如何进行前端职业规划

目录 找准自身定位 未来发展方向 扬长避短很有效 你的出处并不能代表什么 将目标放长放远 职业发展中面临的选择 全栈 or 纯前端? ToB or ToC 赚钱 or 个人成长? 分析每个阶段的需求 为什么不可以一边赚钱一边做喜欢的事情呢 我们还没离开校园的时候,就已经知道要…...

GD32F103系列单片机片上FLASH和ARM介绍

本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发 后续项目主要在下面该专栏中发布&#xff1a; 手把手教你嵌入式国产化_不及你的温柔的博客-CSDN博客 感兴趣的点个关注收藏一下吧! 电机驱动开发可以跳转&#xff1a; 手把手教你嵌入式国产化-实战项目-无刷电机驱动&am…...

Ansible自动化运维中的Setup收集模块应用详解

作者主页&#xff1a;点击&#xff01; Ansible专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年5月22日13点14分 &#x1f4af;趣站推荐&#x1f4af; 前些天发现了一个巨牛的&#x1f916;人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xf…...

再次学习History.scrollRestoration

再次学习History.scrollRestoration 之前在react.dev的源代码中了解到了这个HIstory的属性&#xff0c;当时写了一篇笔记来记录我对它的理解&#xff0c;现在看来还是一知半解。所以今天打算重新学习一下这个属性&#xff0c;主要从属性以及所属对象的介绍、使用方法&#xff0…...

python PyQt5 数字时钟程序

效果图&#xff1a; 概述 本文档将指导您如何使用Python的PyQt5库创建一个简单的时钟程序。该程序将显示当前时间&#xff0c;并具有以下特性&#xff1a; 始终在最前台显示。窗口可拖动。鼠标右键点击窗口可弹出退出菜单。时间标签具有红色渐变效果。窗口初始化时出现在屏幕…...

骨传导耳机哪个品牌值得入手?精选五大不容错过的王者品牌推荐!

尽管骨传导耳机作为新型蓝牙耳机问世不久&#xff0c;但凭借其独特的传音方式和舒适的佩戴体验&#xff0c;已经迅速在市场上崭露头角&#xff0c;赢得了广大音乐爱好者和运动达人的青睐。然而&#xff0c;随着骨传导耳机热度增高&#xff0c;市场上开始出现一些品质参差不齐的…...

Vue.js|项目安装

根据Vue脚手架创建出来的项目目录&#xff1a; 运行项目&#xff1a; 控制台中输入下面的命令&#xff1a; npm run serve 修改vue项目运行端口&#xff1a; 前往vue.config.js中添加下面的代码&#xff1a; devServer: {port: 7000} 接着前往控制台输入Ctrlc关闭项目&…...

多线程新手村4--定时器

定时器是日常开发中很常见的组件&#xff0c;定时器大家可能不知道是干什么的&#xff0c;但是定时炸弹肯定都听过&#xff0c;定个时间&#xff0c;过一段时间后bomb&#xff01;&#xff01;&#xff01;爆炸 定时器的逻辑和这个一样&#xff0c;约定一个时间&#xff0c;这…...

如何衡量安全阀检测的价格与价值?一文揭晓答案

安全阀作为工业设备中的重要组件&#xff0c;其性能的稳定性和可靠性直接影响着整个系统的安全运行。因此&#xff0c;对安全阀进行定期检测和维护显得尤为重要。 那么&#xff0c;安全阀检测一个需要多少钱呢&#xff1f; 在这篇文章中&#xff0c;佰德将从检测费用构成、市…...