数据库和Flask项目搭建

1 sqlalchemy原生操作

# 操作原生sql ---》用得少
import pymysql
import threading
# 1 导入
from sqlalchemy import create_engine
from sqlalchemy.engine.base import Engine
# 2 创建引擎
engine = create_engine("mysql+pymysql://root:1234@127.0.0.1:3306/cnblogs",max_overflow=0,  # 超过连接池大小外最多创建的连接pool_size=5,     # 连接池大小pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置)
)# 3 使用引擎,拿到链接
# conn = engine.raw_connection()
# # 4 剩下的一样了
# cursor=conn.cursor(pymysql.cursors.DictCursor)
# cursor.execute('select * from article limit 10')
# res=cursor.fetchall()
#
# print(res)## 多线程测试:
def task(arg):conn = engine.raw_connection()cursor = conn.cursor()cursor.execute("select * from article")result = cursor.fetchall()print(result)cursor.close()conn.close()for i in range(20):t = threading.Thread(target=task, args=(i,))t.start()

2 sqlalchemy操作表

# 1 建个 models.py  里面写 表模型
# 2 把表模型---》同步到数据库中
# 3 增删查改

2.1 创建删除表

# 1 导入
import datetime
from sqlalchemy import create_engine
from sqlalchemy.orm import declarative_base
from sqlalchemy import Column, Integer, String, Text, ForeignKey, DateTime, UniqueConstraint, IndexBase = declarative_base()  # Base 当成 models.Model# 2 创建表模型
class User(Base):__tablename__ = 'users'  # 表名# 写字段id = Column(Integer, primary_key=True, autoincrement=True)  # id 主键name = Column(String(32), index=True, nullable=False)  # name列,索引,不可为空email = Column(String(32), unique=True)# datetime.datetime.now不能加括号,加了括号,以后永远是当前时间ctime = Column(DateTime, default=datetime.datetime.now)extra = Column(Text)# 3 没有命令---》后期使用第三方模块,可以有命令
# 目前需要手动做
# sqlalchemy 不能创建数据库,能创建表,删除表,不能删除增加字段(第三方模块)
# 3.1 创建引擎
engine = create_engine("mysql+pymysql://root:1234@127.0.0.1:3306/sqlalchemy01",max_overflow=0,  # 超过连接池大小外最多创建的连接pool_size=5,  # 连接池大小pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置)
)
## 3.2 把表模型同步到数据库中
Base.metadata.create_all(engine)# 3.3 删除表
# Base.metadata.drop_all(engine)

2.2 简单的增删改查

from models import Userfrom sqlalchemy import create_engine# 1 创建引擎
engine = create_engine("mysql+pymysql://root:1234@127.0.0.1:3306/sqlalchemy01",max_overflow=0,  # 超过连接池大小外最多创建的连接pool_size=5,  # 连接池大小pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置)
)# 2 orm操作--》借助于 engine 得到session(conn)对象
from sqlalchemy.orm import sessionmakerConnection = sessionmaker(bind=engine)
conn = Connection()
# 3 使用conn---》进行orm操作
# 3.1 增加数据
# user = User(name='lqz', email='3@qq.com')
# # 插入到数据库
# conn.add(user)  # 放个对象
# # 提交
# conn.commit()
# # 关闭链接
# conn.close()# 3.2 查询数据
# 查询User表中id为1的所有记录--》放到列表中
# res=conn.query(User).filter_by(id=1).all()
# print(res)## 3.3 删除
# res = conn.query(User).filter_by(name='lqz').delete()
# print(res)
# conn.commit()## 3.4 修改# res=conn.query(User).filter_by(name='9999').update({'extra':'xxsss'})
# conn.commit()

3 一对多关系

# 1 一对一   [本质就是一对多--》多的那个唯一]
# 2 一对多
# 3 多对多

3.1 关系

####  一对多关系
class Hobby(Base):__tablename__ = 'hobby'id = Column(Integer, primary_key=True)caption = Column(String(50), default='篮球')def __str__(self):return self.captionclass Person(Base):__tablename__ = 'person'nid = Column(Integer, primary_key=True)name = Column(String(32), index=True, nullable=True)# hobby指的是tablename而不是类名hobby_id = Column(Integer, ForeignKey("hobby.id"))  # 一个爱好,可以被多个人喜欢,一个人只能喜欢一个爱好# 跟数据库无关,不会新增字段,只用于快速链表操作# 类名,backref用于反向查询hobby = relationship('Hobby', backref='pers')def __str__(self):return self.namedef __repr__(self):return self.name
from models import Person,Hobby
# 第一步:创建engine
from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://root:123456@127.0.0.1:3307/sqlalchemy001?charset=utf8",max_overflow=0,  # 超过连接池大小外最多创建的连接pool_size=5,  # 连接池大小pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置)
)# 第二步:创建 session对象---老方式
from sqlalchemy.orm import Session
session=Session(engine)if __name__ == '__main__':### 笨办法增加#1 先增加一个hobby# hobby=Hobby()# session.add(hobby)# session.commit()#2 增加Person---》必须要有hobby_id# person=Person(name='lqz',hobby_id=1)# session.add(person)# session.commit()### 简便方法--》增加person的同时,增加了Hobby# person = Person(name='hope123', hobby=Hobby(caption='乒乓球'))# session.add(person)# session.commit()# hobby=session.query(Hobby).filter_by(id=1).first()# person = Person(name='hope', hobby=hobby)# session.add(person)# session.commit()# 基于对象的跨表查询--->正向# person=session.query(Person).filter_by(nid=2).first()# print(person)# print(person.hobby_id)# print(person.hobby)# 基于对象的跨表查询--->反向hobby = session.query(Hobby).filter_by(id=1).first()print(hobby.caption)print(hobby.pers)

4 scoped线程安全

# 1 如果我们把session 做成全局 单例-每个视图函数,用同一个session,有问题#2 如果在每个视图函数中,都对session实例化一次-代码有点麻烦# 3 全局就用一个session对象,它在不同线程中---》都是这个线程自己的
from models import User
import threading
# 第一步:创建engine
from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://root:1234@127.0.0.1:3306/sqlalchemy001?charset=utf8",max_overflow=0,  # 超过连接池大小外最多创建的连接pool_size=5,  # 连接池大小pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置)
)# 第二步:创建 线程安全的 session
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm import scoped_session
Session = sessionmaker(bind=engine)
session=scoped_session(Session)# 第三步:正常使用-->再flask中,使用全局的session即可,实现:不同线程使用线程自己的session对象
def task(se,i):session=se()session.add(User(name='xxx',email=f'{i}@qq.com'))session.commit()print('=========',session)if __name__ == '__main__':l=[]for i in range(10):t=threading.Thread(target=task,args=[session,i])t.start()l.append(t)for i in l:i.join()

5多对多关系

5.1 表模型

#### 多对多
class Boy2Girl(Base):__tablename__ = 'boy2girl'id = Column(Integer, primary_key=True, autoincrement=True)girl_id = Column(Integer, ForeignKey('girl.id'))boy_id = Column(Integer, ForeignKey('boy.id'))ctime = Column(DateTime, default=datetime.datetime.now)class Girl(Base):__tablename__ = 'girl'id = Column(Integer, primary_key=True)name = Column(String(64), unique=True, nullable=False)def __repr__(self):return self.nameclass Boy(Base):__tablename__ = 'boy'id = Column(Integer, primary_key=True, autoincrement=True)name = Column(String(64), unique=True, nullable=False)# 与生成表结构无关,仅用于查询方便,放在哪个单表中都可以girls = relationship('Girl', secondary='boy2girl', backref='boys')def __repr__(self):return self.name

5.2 操作

from models import Boy,Girl,Boy2Girl
# 第一步:创建engine
from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://root:1234@127.0.0.1:3306/sqlalchemy001?charset=utf8",max_overflow=0,  # 超过连接池大小外最多创建的连接pool_size=5,  # 连接池大小pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置)
)# 第二步:创建 session对象---老方式
from sqlalchemy.orm import Session
session=Session(engine)if __name__ == '__main__':### 1 增加记录--笨办法# boy=Boy(name='张四')# boy1=Boy(name='张五')# girl=Girl(name='小粉')# girl1=Girl(name='小紫')# session.add_all([boy,girl,boy1,girl1])# session.commit()## 2 往中间表增加记录# res=Boy2Girl(boy_id=1,girl_id=1)# session.add_all([res])# session.commit()## 3 简便方式增加记录girls=session.query(Girl).filter(Girl.id>=2).all()print(girls)## 3.1 让id为2的张四,跟上面俩女生约会# boy = session.query(Boy).filter(Boy.id == 2).all()[0]# print(boy)# boy.girls=girls# session.add(boy)# session.commit()## 3.2 新用户跟上面俩女生约会# boy = Boy(name='彭于晏',girls=girls)# session.add(boy)# session.commit()# 4 基于对象的跨表查--》正向# boy = session.query(Boy).filter(Boy.id == 2).all()[0]# print(boy.name)# print(boy.girls)girl = session.query(Girl).filter(Girl.id == 2).all()[0]print(girl.name)print(girl.boys)

6 常用查询筛选

from models import User,Person,Hobby,Boy,Girl,Boy2Girl
# 第一步:创建engine
from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://root:123456@127.0.0.1:3307/sqlalchemy001?charset=utf8",max_overflow=0,  # 超过连接池大小外最多创建的连接pool_size=5,  # 连接池大小pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置)
)# 第二步:创建 session对象---老方式
from sqlalchemy.orm import Session
session=Session(engine)if __name__ == '__main__':## 1 filter_by查询  写参数# res=session.query(User).filter_by(name='hope11',id=4).all()# res=session.query(User).filter_by(name='hope11').all() # 返回列表# res=session.query(User).filter_by(name='hope11').first() # 返回单条,但是不能all() 在用first,因为all后是列表## 2 filter[where]查询  写条件# res = session.query(User).where(User.id>=1).all()  # 就是filter# res = session.query(User).filter(User.id>=1).all()# res = session.query(User).filter(User.id==2).all()# res = session.query(User).filter(User.id>=2) # 原生sql## 3 between# res = session.query(User).where(User.id.between(1, 38), User.name == 'xxx').all()## 4 in# res = session.query(User).filter(User.id.in_([1, 3, 4,37])).all()## 5 ~非,除。。外# res = session.query(User).filter(~User.id.in_([1, 3, 4]),User.name=='xxx').all()# 6 二次筛选# select * from user where user.id in (select id from user where name=xxx)# res = session.query(User).filter(User.id.in_(session.query(Person.nid).filter_by(name='lqz'))).all()# 7 and,or条件from sqlalchemy import and_, or_# or_包裹的都是or条件,and_包裹的都是and条件# res = session.query(User).filter(and_(User.id > 3, User.name == 'eric')).all()# res = session.query(User).filter(or_(User.id < 2, User.name == 'eric')).all()# res = session.query(User).filter(#     or_(#         User.id < 2,#         and_(User.name == 'eric', User.id > 3),#         User.extra != ""#     ))# print(res)# 8 通配符,以e开头,不以e开头# res = session.query(User).filter(User.name.like('l%')).all()# ret = session.query(User).filter(~User.name.like('l%'))# 9 限制,用于分页,区间# ret = session.query(User)[0:3]  # 第一页,一页显示三条# 10 排序,根据name降序排列(从大到小) desc   asc# ret = session.query(User).order_by(User.name.asc()).all()# 11 第一个条件重复后,再按第二个条件升序排   字符串按什么排?# ret = session.query(User).order_by(User.name.desc(), User.id.asc()).all()# 12 分组      一旦分组后,select 字段必须是 分组字段或聚合函数的字段from sqlalchemy.sql import func# select name from user group by name# ret = session.query(User).group_by(User.name).all() # 分组完要统计--》这个sql一般不写#  分组之后取最大id,id之和,最小id# select max(id),sum(id),min(id),name from user group by user.name;# ret = session.query(#     func.max(User.id),#     func.sum(User.id),#     func.min(User.id),User.name).group_by(User.name).all()# # haviing筛选# select max(id),sum(id),min(id),name from user where id >=4 group by user.name;# User.objects.values('name').filter(id__gte=4).anoto(m=max('id'),s=sum('id'),i=min('id')).filter(s__gt=400.values(m,s,i,name)# ret = session.query(#     func.max(User.id),#     func.sum(User.id),#     func.min(User.id),User.name).filter(User.id>=4).group_by(User.name).having(func.sum(User.id) > 400).all()# 13 连表(默认用forinkey关联)## 笛卡尔积链表# select * from person,hobby where person.hobby_id=hobby.id;# ret = session.query(Person, Hobby).filter(Person.hobby_id == Hobby.id).all() #笛卡尔积后过滤#  join表,默认是inner join 没有指定on字段,默认按外键# select * from person INNER join hobby on person.hobby_id=hobby.id;# ret = session.query(Person).join(Hobby)#  isouter=True 外连,表示Person left join Favor,没有右连接,反过来即可# select * from person left join hobby on person.hobby_id=hobby.id;# ret = session.query(Person).join(Hobby, isouter=True)# ret = session.query(Hobby).join(Person, isouter=True)# # 自己指定on条件(连表条件),第二个参数,支持on多个条件,用and_,同上   因为我们可以没有强外键关联ret = session.query(Person).join(Hobby, Person.nid == Hobby.id, isouter=True)########## 留着 ############# # 组合(了解)UNION 操作符用于合并两个或多个 SELECT 语句的结果集# # union和union all的区别?# q1 = session.query(Users.name).filter(Users.id > 2)# q2 = session.query(Favor.caption).filter(Favor.nid < 2)# ret = q1.union(q2).all()## q1 = session.query(Users.name).filter(Users.id > 2)# q2 = session.query(Favor.caption).filter(Favor.nid < 2)# ret = q1.union_all(q2).all()print(ret)

7 flask-sqlalchemy使用

7.1 项目目录

image-20240618193417845

7.2 使用flask-sqlalchemy集成到flask中

  • 安装
pip install flask_sqlalchemy
  • init
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
app = Flask(__name__, template_folder='../templates', static_folder='../static')
app.config.from_pyfile('./settings.py')db.init_app(app)
from .views import bp_userapp.register_blueprint(bp_user)
  • models
import datetimefrom . import db### 单表
class User(db.Model):__tablename__ = 'users'  # 表名# 写字段id = db.Column(db.Integer, primary_key=True, autoincrement=True)  # id 主键name = db.Column(db.String(32), index=True, nullable=False)  # name列,索引,不可为空email = db.Column(db.String(32), unique=True)# datetime.datetime.now不能加括号,加了括号,以后永远是当前时间ctime = db.Column(db.DateTime, default=datetime.datetime.now)extra = db.Column(db.Text)def __str__(self):return self.namedef __repr__(self):return self.name
  • settings
DEBUG=True
SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:1234@127.0.0.1:3306/sqlalchemy003?charset=utf8"
SQLALCHEMY_POOL_SIZE = 5
SQLALCHEMY_POOL_TIMEOUT = 30
SQLALCHEMY_POOL_RECYCLE = -1
# 追踪对象的修改并且发送信号
SQLALCHEMY_TRACK_MODIFICATIONS = False
  • views
from flask import Blueprint, render_template, jsonify
from .models import User# bp_user = Blueprint('user', __name__)
#url_prefix可以为增加url的path部分的前缀,可以更方便的去管理访问视图函数。
user_bp = Blueprint('user',__name__,url_prefix='/user')
from . import db@bp_user.route('/')
def index():user=User(name='xxx',email='55@qq.com')db.session.add(user)db.session.commit()# 把用户表中所有数据都查出来,返回给前端res = db.session.query(User).filter(User.id >= 1).all()# 不行 json序列化,只能序列化 数字,字符串,布尔,列表,和字典# res 列表套对象---》不能序列化# l = []# for item in res:#     l.append({'name': item.name, 'email': item.email})# return jsonify({'code': 100, 'msg': "成功", 'results': l})return render_template('index.html',users=res)

8 flask-migrate使用

# 1 数据库肯定要自己创建
# 2 创建表,增加删除字段---》手动做---》django 有两个命令---》自动做-有没有种方案,跟djagno一样,自动记录,自动迁移# 3 django中:python manage.py makemigrationspython manage.py migrate 
# 4 第三方模块:flask-migrate--》完成跟django一样--》命令稍微有些不同# https://github.com/miguelgrinberg/Flask-Migrate/
pip3 install Flask-Migrate --upgrade
4.0.7####### 使用
from flask_migrate import Migrateapp = Flask(__name__)
app.config.from_pyfile('./settings.py')
db = SQLAlchemy(app)
# db.init_app(app)
migrate = Migrate(app, db) # flask 就会多出好几个命令---》# flask --app manage:app db init  # 初始化,第一次执行,以后再也不执行了,它执行完,会出现一个migrations文件夹
# flask --app manage:app db migrate # django中的makemigrations 是一模一样
# flask --app manage:app db upgrade  # 跟django的migrate一样
# flask上其他第三方插件corstokencacherestful

9 flask 项目

9.1 项目目录

image-20240618211324756
#  网上开源的---》前后端混合layui---》rbac的权限控制下载下来---》运行---》研究功能flask db initflask db migrate -m '数据初始化'flask db upgradeflask admin init# https://gitee.com/pear-admin/pear-admin-flask

image-20240618211229137

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flask定制Excel命令

定制excel命令并插入到数据库中 import osfrom flask import Flask from flask.cli import AppGroup import click import pymysql from openpyxl import load_workbookapp = Flask(__name__)@app.cli.group() def excel():"""Excel related commands."&qu…

flask的简单使用

1 flask介绍 #1 python 界的web框架-Django:大而全,你要的东西都有 [orm,缓存,认证]django-ninja-flask:小而精,所有web开发需要的东西,借助于第三方集成-web.py-----同步框架--进程线程架构--3.x以后支持异步--tornado sanicfastapi:高性能小而精,借助于第三方:orm…

模拟集成电路设计系列博客——7.5.5 折叠型ADC

7.5.5 折叠型ADC 我们刚了解完输入放大器的数量如何通过插值型架构来减少。但是对于一个N bit的ADC来说,仍然需要\(2^N\)个锁存比较器。这个大量的比较器数量可以通过折叠型ADC架构来减少。折叠型ADC架构类似于两步型ADC,一组LSB分离于一组MSB进行独立的查找。但是,相比两步…

240627构造

20240627构造专题 写在前面:出场即巅峰(明日模拟赛RP++) 一.何为构造 就是通过对一道题题面的分析可以发现某种规律(类似于不完全归纳法),然后发掘本质,就可以很快的解题,但是显然我还没有掌握 二.一些技巧 1.寻找特殊性质,从而求解 2.估算上界(也就是对最优情况进行…

别人工作8小时,我只需1小时!这些宝藏网站我都替你收集好了!

mac免费应用,效率工具,编程工具,设计网站,图片网站,通通一网打尽软件mac应用下载 很多破解版应该都可以找到snipaste: 截图工具,快捷截图,贴图等功能。幕布: 快速编辑思维导图。sublime text: 文档编辑器(打开速度贼快)。visual studio code: 新一代编辑器(插件非常…

VLC工具使用指南

一、引言 VLC(VideoLAN Client)是一款功能强大的免费开源跨平台多媒体播放器和框架,能够播放大多数多媒体文件以及DVD、音频CD、VCD和各种流媒体协议。无论是本地视频文件还是网络视频流,VLC都能轻松应对。本文将详细介绍VLC工具的基本用法和高级功能。 二、安装与设置 下载…

递归示例-指定数字以内的所有排列组合(Reduce)

指定数字以内的所有排列组合: 定义名称版:=pmtt(指定数字)pmtt=LAMBDA(x,IF(x=1,1,VSTACK(pmtt(x-1),REDUCE(SEQUENCE(x),SEQUENCE(,x-1)^0*x,LAMBDA(a,b,TOCOL(a&SEQUENCE(,b)))))))不定义名称版:=LET(fx,LAMBDA(npmtt,x,IF(x=1,1,VSTACK(npmtt(npmtt,x-1),REDUCE(SEQU…

nodejs解压zip/rar文件到本地,并获取到解压进度

方案:解压到本地的大小 / zip文件总大小(解压后的) ,得出解压进度 先得出解压后的文件大小,然后解压到本地const AdmZip = require("adm-zip"); const JSZip = require(jszip);// 指定ZIP文件的路径 const admZip = new AdmZip("D:\\Users\\whr4220\\Downloa…

畅联云看视频卡顿、画质不清原因可能是一些参数没有配置对

在畅联云平台观看视频时,很多用户可能会遇到卡顿和画质不清晰的问题。这些问题往往由多种因素共同导致,包括网络带宽与传输质量、视频编码与压缩、服务器性能与负载均衡,以及视频源质量等。本文我们将重点说一下摄像机上面的一些可能影响视频卡顿和画质的参数。 打开摄像机w…

R语言独立成分分析fastICA、谱聚类、支持向量回归SVR模型预测商店销量时间序列可视化|附代码数据

全文链接:http://tecdat.cn/?p=31948 原文出处:拓端数据部落公众号 本文利用R语言的独立成分分析(ICA)、谱聚类(CS)和支持向量回归 SVR 模型帮助客户对商店销量进行预测。 首先,分别对商店销量的历史数据进行了独立成分分析,得到了多个独立成分;其次,利用谱聚类方法…

Profibus协议转Modbus协议网关模块在船舶中的应用

本文主要介绍了Profibus协议转Modbus协议网关模块(XD-MDPB100)在船舶中的应用。 Profibus转Modbus网关能实现Profibus总线和Modbus协议之间的数据转换与对接,为船舶系统之间的信息交换提供便利。一、背景 在当今数字化快速发展的时代,船舶作为重要的交通工具之一,也在不断…

sessionStorage 能在多个标签页之间共享数据吗?

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣 最近,我的一个朋友在面试中被一个关于 sessionStorage 的问题难住了。我们来聊聊这个话题。sessionStorage 能在多个标签页之间共享数据吗?在回答这个问题之前我们先来聊聊另一个存储API localstorage localstorage与s…

2024-06-27 java spring boot项目用maven打包报错:xxx-0.0.1-SNAPSHOT.jar中没有主清单属性

问题如下: 原因:打包文件pom.xml配置问题<skip>true</skip>不能为true!为true时,此处引用网友的解释: 在spring-boot-maven-plugin的配置中设置 <skip>true</skip> 时,实际上你告诉Maven在执行构建生命周期时跳过这个插件的运行。此插件负责将你的…

如何设计一个好的测试用例

如何理解一个“好的”测试用例? “好的”测试用例一定是一个完备的集合,它能够覆盖所有等价类以及各种边界值,而跟能够发现缺陷无关。 举例子: 被测软件 --- 鱼塘 软件缺陷 --- 鱼 测试用例集 --- 渔网 “好的”测试用例集就是一张能够覆盖整个鱼塘的大鱼网,只要鱼塘里有鱼…

聚类模型的算法性能评价

一、概述作为机器学习领域的重要内容之一,聚类模型在许多方面能够发挥举足轻重的作用。所谓聚类,就是通过一定的技术方法将一堆数据样本依照其特性划分为不同的簇类,使得同一个簇内的样本有着更相近的属性。依不同的实现策略,聚类算法有很多种,如基于距离的k-means、基于密…

常见的域名劫持现象

在当今数字化的时代,互联网已经成为人们生活和工作中不可或缺的一部分。然而,随着网络的普及和发展,一些安全问题也逐渐浮现,域名劫持就是其中之一。域名劫持不仅会给用户带来不便,还可能导致严重的安全隐患。下面让我们来了解一些常见的域名劫持现象。 1、一种常见的域名…

SymPy-1-13-中文文档-十一-

SymPy 1.13 中文文档(十一)原文:docs.sympy.org/latest/index.html离散原文链接:docs.sympy.org/latest/modules/discrete.html在 SymPy 的discrete模块中实现了计算有限序列的离散变换和卷积的方法。 该模块包含对离散序列操作的函数。 Transforms - fft, ifft, ntt, intt…

SymPy-1-13-中文文档-十五-

SymPy 1.13 中文文档(十五)原文:docs.sympy.org/latest/index.html物理原文:docs.sympy.org/latest/reference/public/physics/index.html一个帮助解决物理问题的模块。 目录氢波函数矩阵泡利代数一维量子谐振子三维量子谐振子二次量子化Wigner 符号单位系统单位系统背后的…

SymPy-1-13-中文文档-七-

SymPy 1.13 中文文档(七)原文:docs.sympy.org/latest/index.html积分原文:docs.sympy.org/latest/modules/integrals/index.html本模块文档包含有关梅耶尔 G 函数和 SymPy 积分的详细信息。 内容使用梅耶尔 G 函数计算积分积分使用 Meijer G 函数计算积分docs.sympy.org/la…