「异步魔法:Python数据库交互的革命」(二)
哈喽,我是阿佑,上篇文章带领了大家跨入的异步魔法的大门——Python数据库交互,一场魔法与技术的奇幻之旅! 从基础概念到DB-API,再到ORM的高级魔法,我们一步步揭开了数据库操作的神秘面纱。SQLAlchemy和Django ORM让我们的数据库操作变得强大而灵活。现在,让我们迈向异步编程的新世界,探索如何同时施展多个咒语而不需等待,让数据库操作快如闪电。
准备好了吗?加入我们,一起开启这段充满挑战和乐趣的魔法冒险吧!
文章目录
- 6. 异步数据库交互
- 6.1 异步编程基础
- asyncio与async/await
- 6.2 Async SQLAlchemy与Tortoise-ORM
- 异步数据库引擎配置
- 异步查询与数据处理
- 7. 性能优化与最佳实践
- 7.1 连接池管理
- 提升数据库访问效率
- 7.2 查询优化策略
- 索引使用与查询优化
- 避免N+1查询问题
- 7.3 安全性考虑
- 防止SQL注入与数据泄露
- 8. 魔法实践:构建一个简单的博客系统
- 系统需求
- 环境准备
- 创建Django项目
- 数据模型设计
- 数据库迁移
- 后台管理界面
- 用户认证
- 创建超级用户
- 视图和URL配置
- 模板创建
- 评论功能实现
- 后续建议
- 9. 案例分析:电子商务平台的数据库设计
- 电子商务平台的核心组件
- 数据库设计原则
- 数据模型设计
- 用户账户模型
- 商品目录模型
- 购物车模型
- 订单管理模型
- 支付系统模型
- 物流跟踪模型
- 性能优化策略
- 安全性设计
- 实践案例
- 8. 结论
- Python数据库交互技术总结
- 回顾我们的旅程
- 未来趋势与持续学习方向
- 持续学习的重要性
- 结束语
6. 异步数据库交互
6.1 异步编程基础
嘿,魔法师们,准备好了吗?我们即将进入Python的异步编程世界,这就像是学习如何同时施展多个咒语,而不需要等待一个咒语完成才能开始下一个。
asyncio与async/await
在Python中,asyncio
库是异步编程的核心,它就像是一个魔法时钟,让我们的程序能够在等待某个咒语完成时,继续进行其他任务。而async
和await
关键字,就像是我们的魔法助手,帮助我们管理这些异步任务。
import asyncio# 定义一个异步咒语
async def cast_spell(spell_name):print(f"开始施展 {spell_name}")await asyncio.sleep(1) # 模拟咒语施展时间print(f"{spell_name} 成功!")# 同时施展多个咒语
async def cast_spells():await asyncio.gather(cast_spell("Expelliarmus"),cast_spell("Expecto Patronum"),cast_spell("Alohomora"))# 启动魔法时钟
asyncio.run(cast_spells())
6.2 Async SQLAlchemy与Tortoise-ORM
异步数据库引擎配置
现在,让我们看看如何将异步魔法带入数据库操作。Async SQLAlchemy
和Tortoise-ORM
是两个支持异步操作的ORM库,它们让我们可以异步地与数据库交互。
首先,让我们看看如何配置Async SQLAlchemy
:
from sqlalchemy.ext.asyncio import create_async_engine
from sqlalchemy.orm import sessionmaker# 创建异步数据库引擎
engine = create_async_engine("sqlite+aiosqlite:///./my_magic_library.db")# 创建异步Session类
AsyncSession = sessionmaker(engine, class_=AsyncIOSession)
async_session = AsyncSession()
异步查询与数据处理
使用Async SQLAlchemy
,我们可以异步地执行数据库查询和操作:
# 定义一个异步模型
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.future import selectasync def fetch_spells(session: AsyncSession):# 异步查询咒语async with session.begin():spells = await session.execute(select(Spell))result = spells.fetchall()for spell in result:print(spell)# 运行异步数据库操作
async def main():async with AsyncSession(engine) as session:await fetch_spells(session)# 启动异步魔法
asyncio.run(main())
Tortoise-ORM
则是另一种选择,它提供了一个更简洁的API来处理异步数据库操作:
import tortoise# 定义一个Tortoise模型
class Spell(tortoise.Model):name = tortoise.Field(max_length=255)description = tortoise.Field()# 定义模型的元数据class Meta:table = "spells"# 配置异步数据库连接
tortoise.init(db_url='sqlite://db.sqlite3',modules={'models': ['__main__']}
)# 异步生成数据库模型
await tortoise.generate_schemas()# 异步查询
async def fetch_spells():for spell in await Spell.all():print(spell.name, spell.description)# 运行异步查询
await fetch_spells()
通过这一章节,我们探索了异步编程的基础知识,以及如何使用Async SQLAlchemy
和Tortoise-ORM
进行异步数据库交互。这就像是学会了如何同时施展多个咒语,大大提高了我们的魔法效率。下一章,我们将讨论性能优化与最佳实践,确保我们的魔法既快速又高效。准备好了吗?让我们继续前进,成为更高级的魔法师!
7. 性能优化与最佳实践
7.1 连接池管理
嘿,魔法师们!今天我们要聊的是性能优化,这就像是给你的魔法棒升级,让它施展咒语更快、更高效。
提升数据库访问效率
想象一下,你的魔法图书馆有很多访客,如果每次有人来都要重新开门,那会是多么低效!这就是为什么我们需要连接池——它可以保持一些“门”开着,让访客(数据库查询)可以快速进出。
在SQLAlchemy中,你可以这样设置连接池:
from sqlalchemy import create_engine# 创建一个带有连接池的引擎
engine = create_engine('postgresql://user:password@localhost/dbname', pool_size=10, max_overflow=20)
这段代码创建了一个连接池,最多可以有10个连接,如果需求超过这个数量,连接池会创建更多的连接,最多到20个。
7.2 查询优化策略
索引使用与查询优化
在数据库中,索引就像是图书馆的目录,它可以帮助我们快速找到所需的书籍。在数据库中添加索引可以显著提高查询速度。
from sqlalchemy import create_engine, Column, Integer, String, Index
from sqlalchemy.ext.declarative import declarative_baseBase = declarative_base()class Spell(Base):__tablename__ = 'spells'id = Column(Integer, primary_key=True)name = Column(String)# 添加索引到name字段Index('idx_name', name)
在这个例子中,我们在name
字段上创建了一个索引,这样当我们根据咒语名称进行查询时,数据库可以更快地定位到记录。
避免N+1查询问题
在使用ORM时,很容易遇到N+1查询问题,这会严重影响性能。想象一下,如果你每次查询一个魔法师和他的咒语时,都要分别查询魔法师和咒语,那将是多么低效!
# 错误的查询方式,会导致N+1问题
wizards = session.query(Wizard).all()
for wizard in wizards:print(wizard.name)for spell in wizard.spells:print(f" - {spell.name}")# 正确的查询方式,一次性获取所有数据
wizards_with_spells = session.query(Wizard).options(joinedload(Wizard.spells)).all()
for wizard in wizards_with_spells:print(wizard.name)for spell in wizard.spells:print(f" - {spell.name}")
7.3 安全性考虑
防止SQL注入与数据泄露
安全是我们施展魔法时必须考虑的重要方面。SQL注入就像是黑魔法师潜入你的图书馆,可能会造成严重破坏。
使用ORM时,通常可以避免SQL注入,因为它们会自动处理参数化查询。但如果你直接写SQL语句,一定要小心:
# 错误的查询方式,可能导致SQL注入
spell_name = "Expelliarmus'; DROP TABLE spells; --"
cursor.execute("SELECT * FROM spells WHERE name = '%s'", (spell_name,))# 正确的查询方式,使用参数化查询
spell_name = "Expelliarmus"
cursor.execute("SELECT * FROM spells WHERE name = :spell_name", {'spell_name': spell_name})
这段代码展示了如何使用参数化查询来防止SQL注入。
通过这一章,我们学习了如何通过连接池管理、查询优化策略和安全性考虑来优化我们的数据库性能。这就像是给我们的魔法装备升级,让它们更加强大和安全。现在,我们已经准备好进入最后一章,总结我们的学习成果,并展望未来的学习方向。准备好了吗?让我们继续前进,成为更高级的魔法师!
8. 魔法实践:构建一个简单的博客系统
在本节中,阿佑将带着大伙们一块深入实践,从头开始构建一个简单的博客系统。我们将使用Python的Django框架,因为它提供了ORM系统来简化数据库操作,同时也有强大的后台管理界面。我们的系统将包括文章的创建、编辑、发布以及评论功能。
系统需求
在开始之前,我们需要明确系统的基本需求:
- 用户认证:用户可以注册、登录和登出。
- 文章管理:用户可以创建、编辑和删除自己的文章。
- 评论系统:用户可以对文章发表评论。
- 文章展示:所有用户都可以浏览文章列表和文章详情。
环境准备
首先,确保你的开发环境中安装了Python和Django。可以通过以下命令安装Django:
pip install django
创建Django项目
接下来,创建一个新的Django项目和一个应用:
django-admin startproject blog
cd blog
python manage.py startapp posts
数据模型设计
在posts/models.py
中,定义我们的数据模型:
from django.db import models
from django.contrib.auth.models import Userclass Post(models.Model):title = models.CharField(max_length=200)content = models.TextField()author = models.ForeignKey(User, on_delete=models.CASCADE)published_date = models.DateTimeField(auto_now_add=True)def __str__(self):return self.titleclass Comment(models.Model):post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')author = models.CharField(max_length=100)content = models.TextField()created_date = models.DateTimeField(auto_now_add=True)def __str__(self):return f"Comment by {self.author} on {self.post.title}"
数据库迁移
创建好模型后,需要进行数据库迁移:
python manage.py makemigrations
python manage.py migrate
后台管理界面
为了让用户能够通过网页管理文章和评论,我们需要注册模型到Django的后台:
# 在posts/admin.py中from django.contrib import admin
from .models import Post, Commentadmin.site.register(Post)
admin.site.register(Comment)
用户认证
Django内置了用户认证系统,我们可以在blog/settings.py
中配置一些设置:
# 添加'django.contrib.auth'到INSTALLED_APPSINSTALLED_APPS = [# ...'django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.admin','posts', # 我们的应用
]# 设置LOGIN_REDIRECT_URL和LOGOUT_REDIRECT_URLLOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/'
创建超级用户
创建一个超级用户,用于登录后台管理系统:
python manage.py createsuperuser
视图和URL配置
在posts/views.py
中,创建文章列表和详情的视图:
from django.shortcuts import render, get_object_or_404
from .models import Postdef post_list(request):posts = Post.objects.all()return render(request, 'posts/post_list.html', {'posts': posts})def post_detail(request, pk):post = get_object_or_404(Post, pk=pk)return render(request, 'posts/post_detail.html', {'post': post})
然后,在blog/urls.py
中配置URL:
from django.contrib import admin
from django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path('', include('posts.urls')), # 包含posts应用的URL
]
在posts/urls.py
中,创建应用的URL:
from django.urls import path
from . import viewsurlpatterns = [path('', views.post_list, name='post_list'),path('post/<int:pk>/', views.post_detail, name='post_detail'),
]
模板创建
创建模板文件posts/post_list.html
和posts/post_detail.html
来展示文章列表和详情。
评论功能实现
在posts/views.py
中,添加评论的视图:
from django.http import HttpResponseRedirect
from .models import Commentdef add_comment_to_post(request, pk):post = get_object_or_404(Post, pk=pk)if request.method == 'POST':content = request.POST.get('content')Comment.objects.create(post=post, author=request.user, content=content)return HttpResponseRedirect(post.get_absolute_url())
更新post_detail.html
模板,添加评论表单。
后续建议
使用Bootstrap或其他CSS框架来美化界面。
启动Django的开发服务器,测试系统的所有功能:
python manage.py runserver
最后,当你在开发环境中测试无误后,可以考虑将博客系统部署到生产环境。
通过本节的实践,你已经了解了如何使用Django构建一个完整的博客系统。这包括了用户认证、文章管理、评论系统等核心功能。这个系统可以作为一个起点,你可以根据需要添加更多功能,比如文章分类、标签、搜索功能等。继续探索和学习,你的Python魔法将越来越强大!
9. 案例分析:电子商务平台的数据库设计
阿佑将和大家一起进行一个深入的案例分析,探索一个电子商务平台的数据库设计。电子商务平台是一个复杂的系统,涉及用户管理、商品目录、订单处理、支付系统、物流跟踪等多个方面。我们将重点讨论数据库设计的最佳实践,以及如何确保系统的可扩展性、性能和安全性。
电子商务平台的核心组件
- 用户账户管理:存储用户信息,包括个人资料、地址簿、订单历史等。
- 商品目录:展示商品信息,包括商品描述、图片、价格、库存等。
- 购物车:管理用户的购物车,包括商品的添加、删除和更新。
- 订单管理:处理订单的创建、支付、发货和状态跟踪。
- 支付系统:集成第三方支付服务,处理支付事务。
- 物流跟踪:与物流服务提供商集成,跟踪订单配送状态。
- 安全性:确保用户数据和交易的安全性。
数据库设计原则
在设计电子商务平台的数据库时,应遵循以下原则:
- 规范化:通过数据库规范化减少数据冗余,保证数据一致性。
- 可扩展性:设计灵活的数据库架构,以适应业务增长和变化。
- 性能优化:通过索引、查询优化和缓存策略提高数据库性能。
- 安全性:实施安全措施,如数据加密、访问控制和SQL注入防护。
数据模型设计
用户账户模型
class User(models.Model):username = models.CharField(max_length=50, unique=True)email = models.EmailField(unique=True)password = models.CharField(max_length=50)first_name = models.CharField(max_length=50)last_name = models.CharField(max_length=50)address = models.ForeignKey(Address, on_delete=models.SET_NULL, null=True)# 其他用户相关信息
商品目录模型
class Product(models.Model):name = models.CharField(max_length=100)description = models.TextField()price = models.DecimalField(max_digits=10, decimal_places=2)stock_quantity = models.IntegerField()image = models.ImageField(upload_to='products/')# 其他商品相关信息
购物车模型
class Cart(models.Model):user = models.ForeignKey(User, on_delete=models.CASCADE)products = models.ManyToManyField(Product, through='CartItem')# 购物车相关信息
订单管理模型
class Order(models.Model):user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)order_date = models.DateTimeField(auto_now_add=True)status = models.CharField(max_length=50)total_price = models.DecimalField(max_digits=10, decimal_places=2)# 订单相关信息
支付系统模型
class Payment(models.Model):order = models.ForeignKey(Order, on_delete=models.CASCADE)payment_date = models.DateTimeField(auto_now_add=True)amount = models.DecimalField(max_digits=10, decimal_places=2)transaction_id = models.CharField(max_length=100)# 支付相关信息
物流跟踪模型
class Shipment(models.Model):order = models.OneToOneField(Order, on_delete=models.CASCADE)tracking_number = models.CharField(max_length=50)carrier = models.CharField(max_length=50)status = models.CharField(max_length=50)# 物流相关信息
性能优化策略
- 索引优化:为常用的查询字段添加索引,如商品的
price
和stock_quantity
,用户的email
等。 - 查询优化:避免复杂的多表关联查询,使用选择性的查询字段,减少数据加载。
- 缓存策略:使用缓存存储频繁访问的数据,如商品目录、热门商品等。
- 负载均衡:在高流量时,使用数据库集群和负载均衡技术分散请求。
安全性设计
- 数据加密:对敏感信息如用户密码、支付信息进行加密存储。
- 访问控制:实施基于角色的访问控制,确保用户只能访问对应的数据。
- SQL注入防护:使用参数化查询,避免SQL注入攻击。
- 安全审计:定期进行安全审计,检查潜在的安全漏洞。
实践案例
假设我们需要为一个电子商务平台添加一个新功能:推荐系统。推荐系统可以根据用户的购买历史和浏览行为,推荐相关的商品。
- 数据收集:收集用户的购买历史、浏览记录、评分等数据。
- 数据分析:使用数据分析工具,如Python的Pandas库,分析用户行为模式。
- 推荐算法:应用推荐算法,如协同过滤、内容推荐等,生成推荐列表。
- 系统集成:将推荐系统集成到电子商务平台的前端,提供个性化推荐。
通过本节的案例分析,我们深入了解了一个电子商务平台的数据库设计。从数据模型设计到性能优化,再到安全性设计,每一步都至关重要。在实际开发中,需要根据业务需求和系统特点,不断调整和优化数据库设计。同时,随着业务的发展,可能还需要引入新技术和架构,如NoSQL数据库、大数据平台等,以满足不断变化的需求。希望本节的案例分析能够为你的数据库设计提供一些有价值的参考和启示。
8. 结论
Python数据库交互技术总结
嘿,亲爱的魔法师们,我们这趟神奇的数据库之旅即将到达终点。在这一路上,我们学到了很多东西,从基础的DB-API到强大的ORM框架,再到异步编程的魔法,我们的能力已经大大提升。
回顾我们的旅程
- DB-API:我们学会了如何使用Python标准库与数据库进行基础的交互,就像是学习基础的魔法咒语。
- SQLAlchemy:我们探索了ORM的奥秘,它让我们能够用Python类来映射数据库表,就像是用高级魔法来管理我们的魔法图书馆。
- Django ORM:我们见识了Django的强大,它提供了一个简洁的API来处理数据库操作,让一切变得简单而高效。
- 异步数据库交互:我们学习了如何使用
asyncio
和异步ORM库,让我们的数据库操作更加快速和非阻塞。 - 性能优化:我们讨论了连接池、查询优化和安全性,确保我们的数据库操作既快速又安全。
未来趋势与持续学习方向
持续学习的重要性
魔法世界是不断变化的,新的魔法和咒语总是在出现。同样,技术领域也在不断进步,新的工具和框架层出不穷。作为一个魔法师,我们需要不断学习和适应。
- 学习新的数据库技术:比如NoSQL数据库、NewSQL数据库,甚至是区块链数据库。
- 掌握更多ORM框架:除了SQLAlchemy和Django ORM,还有许多其他的ORM框架等待我们去探索。
- 深入异步编程:随着异步编程在Python中的日益普及,深入学习和实践异步编程将是一个重要的方向。
- 关注安全性:随着数据泄露和网络攻击的增加,学习如何保护我们的数据库和应用程序变得尤为重要。
结束语
亲爱的魔法师们,我们的旅程虽然结束了,但你们的魔法之路才刚刚开始。记住,每一次数据库查询都像是施展一个咒语,每一次性能优化都像是给你的魔法棒升级。保持好奇心,不断探索和学习,你们将成为最伟大的魔法师。
就这样,我们的Python数据库交互之旅告一段落。希望你们喜欢这段旅程,也希望你们从中学到了很多。如果你有任何问题,或者想要继续探索魔法世界,随时欢迎回来。祝你们的魔法之路充满乐趣和成功!再见!🧙♂️✨
我是阿佑,一个专注于把晦涩的技术讲得有趣的中二青年,欢迎持续关注~
相关文章:

「异步魔法:Python数据库交互的革命」(二)
哈喽,我是阿佑,上篇文章带领了大家跨入的异步魔法的大门——Python数据库交互,一场魔法与技术的奇幻之旅! 从基础概念到DB-API,再到ORM的高级魔法,我们一步步揭开了数据库操作的神秘面纱。SQLAlchemy和Djan…...
php正则中的i,m,s,x,e分别表示什么
正则表达式模式修饰符(也称为标志或模式修饰符)用于改变正则表达式的行为。这些修饰符可以附加在正则表达式的定界符之后,通常为正斜杠(/)或井号(#),以改变搜索或替换的方式。 1、i…...

最新!2023年台湾10米DEM地形瓦片数据
上次更新谷歌倾斜摄影转换生成OSGB瓦片V1.1版本,使用该版本生产了台北、台中、桃园三个地方的倾斜摄影OSGB数据,在OSGB可视化软件中进行展示,可视化效果和加载效率俱佳。已经很久没更新地形瓦片数据,主要是热点地区的原始数据没有…...
网络学习(11) |深入解析客户端缓存与服务器缓存:HTTP缓存控制头字段及优化实践
文章目录 客户端缓存与服务器缓存的区别客户端缓存浏览器缓存应用程序缓存优点缺点 服务器缓存优点缺点 HTTP缓存控制头字段Cache-ControlExpiresLast-ModifiedETag 缓存策略的优化与实践经验分享1. 使用合适的缓存头字段2. 结合使用Last-Modified和ETag3. 利用CDN进行缓存4. 实…...
uniapp中二次封装jssdk和使用
直接上代码 // import wx from "weixin-js-sdk"; /*** 考虑到包的大小,所以直接在 index.html 文件中cdn引入了jssdk* <script src"https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>* 注意:这里 jWeixin 一…...

只刷题可以通过PMP考试吗?
咱们都知道,PMBOK那本书,哎呀,读起来确实有点费劲。所以,有些人就想了,干脆我就刷题吧,题海战术,没准儿也能过。这话啊,听起来似乎有点道理,但咱们得好好琢磨琢磨。 刷题…...

Python Selenium 详解:实现高效的UI自动化测试
落日余辉,深情不及久伴。大家好,在当今软件开发的世界中,自动化测试已经成为保障软件质量和快速迭代的重要环节。而在自动化测试的领域中,UI自动化测试是不可或缺的一部分,它可以帮助测试团队快速验证用户界面的正确性…...
npm获取yarn在安装依赖时 git://github.com/user/xx.git 无法访问解决方法 -- 使用 insteadOf设置git命令别名
今天在使用一个node项目时突然遇到 一个github的拉取异常,一看协议居然是git://xxx 貌似github早就不用这种格式了, 而是使用的gitgithub.com:xxx 这种或者https协议,解决方法: 使用insteadof设置git别名 url.<base>.inste…...

Centos7网络故障,开机之后连不上网ens33mtu 1500 qdisc noop state DOWN group default qlen 1000
说明 这是Linux系统网络接口的信息,其中"mtu 1500"表示最大传输单元大小为1500字节,“qdisc noop”表示没有设置特殊的队列算法,“state down”表示该接口当前处于关闭状态,“group default”表示该接口属于“default”…...
分析 Base64 编码和 URL 安全 Base64 编码
前言 在处理数据传输和存储时,Base64 编码是一种非常常见的技术。它可以将二进制数据转换为文本格式,便于在文本环境中传输和处理。Go 语言提供了对标准 Base64 编码和 URL 安全 Base64 编码的支持。本文将通过一个示例代码,来分析这两种编码…...
cocos 屏幕点击坐标转换为节点坐标
let scPos event.getLocation(); let camera find(Canvas/Camera).getComponent(Camera).screenToWorld(new Vec3(scPos.x,scPos.y,0));//摄像机 let p this.node.getComponent(UITransform).convertToNodeSpaceAR(camera);//this.node为指定的节点为原点(0,0&…...

电瓶车进电梯识别报警摄像机
随着电动车的普及,越来越多的人选择电动车作为出行工具。在诸多场景中,电梯作为一种常见的交通工具,也受到了电动车用户的青睐。然而,电动车进入电梯时存在一些安全隐患,为了提高电动车进电梯的安全性,可以…...
数据库到服务器提权
数据库提权流程: 1、先获取到数据库用户密码 -网站存在SQL注入漏洞 -数据库的存储文件或备份文件 -网站应用源码中的数据库配置文件 -采用工具或脚本爆破(需解决外联问题) 2、利用数据库提权项目进行连接 MDUT //jkd1.8 启动 Databasetools …...
【MySQL精通之路】InnoDB(9)-表和页压缩(1)-表压缩
目录 1.表压缩概述 2.创建压缩表 2.1 在FPT表空间中创建压缩表 2.2 在通用表空间中创建压缩表 2.3 压缩表的限制 3.优化InnoDB表的压缩 4.运行时监控InnoDB表压缩 5.InnoDB表的压缩工作原理 5.1 压缩算法 5.2 InnoDB数据存储和压缩 5.3 B树页面的压缩 5.4 压缩BLOB、…...
【前端】vue+element项目中select下拉框label想要显示多个值多个字段
Vue Element项目中select下拉框label想要显示多个值 <el-selectv-model"form.plantId"collapse-tagsfilterableplaceholder"请选择品种种类"style"width: 270px;"><el-optionv-for"item in plantIdArray":key"item.id&…...

橙派探险记:开箱香橙派 AIpro 与疲劳驾驶检测的奇幻之旅
目录 引子:神秘包裹的到来 第一章:香橙派AIpro初体验 资源与性能介绍 系统烧录 Linux 镜像(TF 卡) 调试模式 登录模式 第二章:大胆的项目构想 系统架构设计 香橙派 AIpro 在项目中的重要作用 第三章…...

云计算期末复习(1)
云计算基础 作业(问答题) (1)总结云计算的特点。 透明的云端计算服务 “无限”多的计算资源,提供强大的计算能力 按需分配,弹性伸缩,取用方便,成本低廉资源共享,降低企…...
frp转发服务
将内网服务转发到外网,我准备了一台阿里云ubuntu22.04服务器,两台内网ubuntu22.04服务器 下载frpc和frps以及配置文件 链接: https://pan.baidu.com/s/1auvcWWnyfpYPYatYhHFYag?pwdqkgh 提取码: qkgh 复制这段内容后打开百度网盘手机App,操作…...

【主流分布式算法总结】
文章目录 分布式常见的问题常见的分布式算法Raft算法概念Raft的实现 ZAB算法Paxos算法 分布式常见的问题 分布式场景下困扰我们的3个核心问题(CAP):一致性、可用性、分区容错性。 1、一致性(Consistency):…...

spring cloud config server源码学习(一)
文章目录 1. 注解EnableConfigServer2. ConfigServerAutoConfiguration2.1 ConditionalOnBean和ConditionalOnProperty2.2 Import注解2.2.1. EnvironmentRepositoryConfiguration.class2.2.2. CompositeConfiguration.class2.2.3. ResourceRepositoryConfiguration.class2.2.4.…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...

【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...

如何在Windows本机安装Python并确保与Python.NET兼容
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...