Flask数据库

2023-11-13

一、ORM

1.1 什么是ORM

ORM 全拼Object-Relation Mapping. 称为对象-关系映射主要实现模型对象到关系数据库数据的映射.比如:把数据库表中每条记录映射为一个模型对象
在这里插入图片描述

1.2 ORM的优缺点有哪些?

优点 :

  • 对数据库的操作都转化成对类,属性和方法的操作.
  • 不用编写各种数据库的sql语句.
  • 不在关注,使用的是mysql、oracle…等数据库

缺点 :
相比较直接使用SQL语句操作数据库,有性能损失.

1.3 Flask-SQLAlchemy安装及设置

  • SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升
  • SQLAlchemy是一个关系型数据库框架,它提供了高层的 ORM 和底层的原生数据库的操作。flask-sqlalchemy 是一个简化了 SQLAlchemy 操作的flask扩展。
    文档地址:

安装

pip install flask-sqlalchemy

如果连接的是 mysql 数据库,需要安装 flask-mysqldb或者pymysql
pymysql 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使mysqldb。

pip install flask-mysqldb

如果flask-mysqldb安装不上,安装, pip install pymysql

数据库连接设置
设置数据库的链接地址,追踪信息
格式:mysql://<用户名>:<密码>@:<端口>/数据库名
如果安装pymysql ,需要这样连接数据库

mysql+pymysql://<用户名>:<密码>@:<端口>/数据库名

# 数据库链接地址
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/test'
# 动态追踪修改设置,如未设置只会提示警告
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

若要查看映射的sql语句,设置:app.config['SQLALCHEMY_ECHO'] = True
配置完成需要去 MySQL 中创建项目所使用的数据库

 mysql -uroot -pmysql
 create database test charset utf8;
"""
操作流程:

- 1.安装扩展
  - pip install flask_sqlalchemy
  - pip install flask_mysqldb / pymysql
- 2.设置数据库的配置信息
- 3.创建sqlalchemy对象db,关联app
- 4.编写模型类,字段,继承自db.Model,
- 5.操作数据库
  - 增删改
  - 查询
"""
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 2.设置数据库的配置信息
# 设置数据库的链接信息,
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://tom:123456@10.0.0.130:3306/test"
# 该字段增加了大量的开销,会被禁用,建议设置为False
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False

# 3.创建sqlalchemy对象db,关联app
db = SQLAlchemy(app)


# 4.编写模型类,字段,继承自db.Model,才能被映射
class Student(db.Model):
	# 如果不指定表名称,默认就是类名的小写,需要自己指定,需要如下
    __tablename__ = "students"
    # 主键, 参数1: 表示id的类型, 参数2: 表示id的约束类型
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))


@app.route('/')
def hello_world():
    return "helloworld"


if __name__ == '__main__':
    # 删除继承自db.Model的表
    db.drop_all()

    # 5.创建数据库的表,创建的是继承自db.Model的表
    db.create_all()

    app.run(debug=True)

mysql> show tables
    -> ;
+----------------+
| Tables_in_test |
+----------------+
| students       |
+----------------+
1 row in set (0.00 sec)

mysql> desc students;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(32) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

1.4 其他配置信息

在这里插入图片描述
连接不同类型数据库参考
bind操作多数据库

1.5 常用的SQLAlchemy字段类型

在这里插入图片描述

1.6常用的SQLAlchemy列选项

在这里插入图片描述

常用的SQLAlchemy关系选项

在这里插入图片描述
与mysql数据类型对应关系:
在这里插入图片描述

二、数据库基本操作

在Flask-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。
会话用 db.session 表示。在准备把数据写入数据库前,要先将数据添加到会话中然后调用 db.session.commit() 方法提交会话。

在 Flask-SQLAlchemy 中,查询操作是通过 query 对象操作数据。
最基本的查询是返回表中所有数据,可以通过过滤器进行更精确的数据库查询。

2.1 数据库增删改

"""
增删改

- 全部都是使用db.session操作
- 常见方法:
  - db.session.add(obj) 添加单个对象
  - db.session.add_all([obj1,obj2]) 添加多个对象
  - db.session.delete(obj) 删除单个对象
  - db.session.commit() 提交会话
  - db.drop_all() 删除继承自db.Model所有表
  - db.create_all() 创建继承自db.Model的所有表
  - 其他:
    - db.session.rollback() 回滚
    - db.session.remove() 移除会话
  - 案例: 编写两个模型类, 一个角色模型类,  还有一个用户模型类
    - 关系: 一对多
"""


from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 1.设置数据库的配置信息
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://tom:123456@10.0.0.130:3306/test"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False

# 2.创建SQLalchemy对象,关联app
db = SQLAlchemy(app)


# 3.编写模型类
# 角色(一方)
class Role(db.Model):
    __tablename__ = "roles"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))

    # 如果一个类继承自object那么重写__str__方法即可, 如果是继承自db.Model那么需要重写__repr__方法
    def __repr__(self):
        return "<Role:%s>" % self.name


# 用户(多方)
class User(db.Model):
    __tablename__ = "users"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))

    # 建立外键
    role_id = db.Column(db.Integer, db.ForeignKey(Role.id))

    # 如果一个类继承自object那么重写__str__方法即可修改对象的默认输出, 如果是继承自db.Model那么需要重写__repr__方法
    def __repr__(self):
        return "<User:%s>" % self.name


@app.route('/')
def hello_world():
    return "helloworld"


if __name__ == '__main__':
    # 先删除表,后创建
    db.drop_all()
    db.create_all()

    app.run(debug=True)
mysql> desc roles;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(32) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

mysql> desc users;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int(11)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(32) | YES  |     | NULL    |                |
| role_id | int(11)     | YES  | MUL | NULL    |                |
+---------+-------------+------+-----+---------+----------------+

具体操作:


In [1]: from demo02role_user import *


In [2]: role=Role(name="admin")

In [3]: role2=Role(name="ops")

In [5]: db.session.add_all([role,role2])

In [6]: db.session.commit()

mysql> select * from roles;
+----+-------+
| id | name  |
+----+-------+
|  1 | admin |
|  2 | ops   |
+----+-------+


In [7]: user1=User(name="laowang",role_id=role.id)

In [8]: user2=User(name="laozhang",role_id=role2.id)

In [9]: db.session.add_all([user1,user2])

In [10]: db.session.commit()
mysql> select * from users;
+----+----------+---------+
| id | name     | role_id |
+----+----------+---------+
|  1 | laowang  |       1 |
|  2 | laozhang |       2 |
+----+----------+---------+
2 rows in set (0.00 sec)



In [11]: user2.name
Out[11]: 'laozhang'

In [12]: user2.name="laowu" # 改

In [13]: db.session.commit()

mysql> select * from users;
+----+---------+---------+
| id | name    | role_id |
+----+---------+---------+
|  1 | laowang |       1 |
|  2 | laowu   |       2 |
+----+---------+---------+
2 rows in set (0.00 sec)


In [14]: db.session.delete(user2) #删

In [15]: db.session.commit()
mysql> select * from users;
+----+---------+---------+
| id | name    | role_id |
+----+---------+---------+
|  1 | laowang |       1 |
+----+---------+---------+


2.2 添加数据

realtionship描述了Role和User的关系。
第一个参数为对应参照的类"User"
第二个参数backref为类User,反向引用属性
第三个参数lazy决定了什么时候SQLALchemy从数据库中加载数据
如果设置为子查询方式(subquery),则会在加载完Role对象后,就立即加载与其关联的对象,这样会让总查询数量减少,但如果返回的条目数量很多,就会比较慢
设置为 subquery 的话,role.users 返回所有数据列表
另外,也可以设置为动态方式(dynamic),这样关联对象会在被使用的时候再进行加载,并且在返回前进行过滤,如果返回的对象数很多,或者未来会变得很多,那最好采用这种方式

"""
查询
relationship 属性方便关联查询,通常写在一方,并且不会在数据库产生响应的字段
"""


from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 1.设置数据库的配置信息
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://tom:123456@10.0.0.130:3306/test"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
app.config["SQLALCHEMY_ECHO"] = True

# 2.创建SQLalchemy对象,关联app
db = SQLAlchemy(app)


# 3.编写模型类
# 角色(一方)
class Role(db.Model):
    __tablename__ = "roles"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))

    # 给role添加了一个users属性, 那么查询的方式是, role.users
    # 给user添加了一个role属性, 那么查询的方式是, user.role
    users = db.relationship("User", backref="role", lazy="dynamic")

    # 如果一个类继承自object那么重写__str__方法即可, 如果是继承自db.Model那么需要重写__repr__方法
    def __repr__(self):
        return "<Role:%s>" % self.name


# 用户(多方)
class User(db.Model):
    __tablename__ = "users"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))
    email = db.Column(db.String(32))
    password = db.Column(db.String(32))

    # 建立外键
    role_id = db.Column(db.Integer, db.ForeignKey(Role.id))

    # 如果一个类继承自object那么重写__str__方法即可, 如果是继承自db.Model那么需要重写__repr__方法
    def __repr__(self):
        return "<User:%s,%s,%s,%s>" % (self.id, self.name, self.email, self.password)


@app.route('/')
def hello_world():
    return "helloworld"


if __name__ == '__main__':
    # 为了演示方便,先删除表,后创建
    db.drop_all()
    db.create_all()

    # 创建测试数据
    ro1 = Role(name='admin')
    db.session.add(ro1)
    db.session.commit()

    # 再次插入一条数据
    ro2 = Role(name='user')
    db.session.add(ro2)
    db.session.commit()

    # 多条用户数据
    us1 = User(name='wang', email='wang@163.com', password='123456', role_id=ro1.id)
    us2 = User(name='zhang', email='zhang@189.com', password='201512', role_id=ro2.id)
    us3 = User(name='chen', email='chen@126.com', password='987654', role_id=ro2.id)
    us4 = User(name='zhou', email='zhou@163.com', password='456789', role_id=ro1.id)
    us5 = User(name='tang', email='tang@itheima.com', password='158104', role_id=ro2.id)
    us6 = User(name='wu', email='wu@gmail.com', password='5623514', role_id=ro2.id)
    us7 = User(name='qian', email='qian@gmail.com', password='1543567', role_id=ro1.id)
    us8 = User(name='liu', email='liu@itheima.com', password='867322', role_id=ro1.id)
    us9 = User(name='li', email='li@163.com', password='4526342', role_id=ro2.id)
    us10 = User(name='sun', email='sun@163.com', password='235523', role_id=ro2.id)
    db.session.add_all([us1, us2, us3, us4, us5, us6, us7, us8, us9, us10])
    db.session.commit()

    app.run(debug=True)

SQLAlchemy查询过滤器

用来过滤数据,返回查询的结果集
在这里插入图片描述

SQLAlchemy查询执行器

用来执行结果集,得到具体数据
在这里插入图片描述
总结:
在这里插入图片描述

查:

数据库增加,删除,修改操作:
增加:
user = User(name='laowang')
db.session.add(user)
db.session.commit()

修改:
user.name = 'xiaohua'
db.session.commit()

删除:
db.session.delete(user)
db.session.commit()


以下12条查询语句:
特点:
模型.query: 得到了所有模型的数据的结果集对象
模型.query.过滤器: 过滤出了想要的数据,还是一个查询结果集对象
模型.query.过滤器.执行器: 取出了结果集中的内容


查询所有用户数据
User.query.all() ==> [user1,user2]

查询有多少个用户
User.query.count()

查询第1个用户
User.query.first()

查询id为4的用户[3种方式]
User.query.get(4) (这里面只能是数字 或 ‘4) 查询不到不会报错
User.query.filter_by(id = 4).first() (一个等号)查询不到不会报错
User.query.filter(User.id == 4).first()  查询不到不会报错

查询名字结尾字符为g的所有数据[开始/包含]
User.query.filter(User.name.endswith('g')).all()
User.query.filter(User.name.startswith('g')).all()
User.query.filter(User.name.contains('g')).all()

查询名字不等于wang的所有数据[2种方式]
User.query.filter(User.name != 'wang').all()
或者
from sqlalchemy import not_
User.query.filter(not_(User.name == 'wang')).all()

查询名字和邮箱都以 li 开头的所有数据[2种方式]
from sqlalchemy import and_
User.query.filter(User.name.startswith('li'),User.email.startswith('li')).all()
User.query.filter(and_(User.name.startswith('li'),User.email.startswith('li'))).all()

查询password是 `123456` 或者 `email` 以 `com` 结尾的所有数据
from sqlalchemy import or_
User.query.filter(or_(User.password == '123456',User.email.endswith('com'))).all()

查询id为 [1, 3, 5, 7, 9] 的用户列表
User.query.filter(User.id.in_([1,3,5,7,9])).all()

查询name为liu的角色数据
user = User.query.filter(User.name == 'liu').first()
role = Role.query.filter(Role.id == user.role_id).first()

查询所有用户数据,并以邮箱排序
User.query.order_by(User.email).all()
User.query.order_by(User.email.desc()).all() # 升序

每页3个,查询第2页的数据
paginate = User.query.paginate(page, per_page,Error_out)
paginate = User.query.paginate(2,3,False)
page: 哪一个页
per_page: 每页多少条数据
Error_out: False 查不到不报错

paginate .pages: 共有多少页
paginate .items: 当前页数的所有对象
paginate .page: 当前第几页

限制查询2条数据
User.query.limit(2).all() 

sqlalchemy查询常见的过滤方式
filter过滤条件:
过滤是数据提取的一个很重要的功能,以下对一些常用的过滤条件进行解释,并且这些过滤条件都是只能通过filter方法实现的:
1. equals : ==
    news= session.query(News).filter(News.title == "title1").first()
    query里面是列查询,字段,传入模型名表示全字段 。
    filter是行查询,没有filter表示全表查询
2. not equals  :  !=
    query(User).filter(User.name != 'ed')

3. like[不区分大小写]  & ilike[区分大小写]query(User).filter(User.name.like('%ed%··')) 
 query(User).filter(User.name.like('__ed%__')) _表示站位符

4. in:
    query(User).filter(User.name.in_(['ed','wendy','jack']))

5. not in:
    query(User).filter(~User.name.in_(['ed','wendy','jack']))

6.  is null:
    query(User).filter(User.name==None)
    # 或者是
    query(User).filter(User.name.is_(None))

7. is not null:
    query(User).filter(User.name != None)
    # 或者是
    query(User).filter(User.name.isnot(None))

8. and:
    query(User).filter(and_(User.name=='ed',User.fullname=='Ed Jones'))
    # 或者是传递多个参数
    query(User).filter(User.name=='ed',User.fullname=='Ed Jones')
    # 或者是通过多次filter操作
    query(User).filter(User.name=='ed').filter(User.fullname=='Ed Jones')

9. or:
    query(User).filter(or_(User.name=='ed',User.name=='wendy'))

如果想要查看orm底层转换的sql语句,可以在filter方法后面不要再执行任何方法直接打印就可以看到了。比如:
        news = session.query(News).filter(or_(News.title=='abc',News.content=='abc'))
        print(news)

数据库查询之relationship属性

* 解释: 为了方便数据库的关联查询
* 特点:
  * 1.不会在数据库产生实体字段
  * 2.关系属性,需要在一方添加
  * 3.外键是添加在多方的, 并且关系属性的使用,需要依赖于外键

* 需求:
  * 1.如果知道了角色的情况下,能否快速查询出,哪些用户扮演了该角色

    * 原始查询方法:
      * role = Role.query.get(1)
      * users = User.query.filter(User.role_id == role.id).all()
   
    * 快速查询:
      * 使用relationship添加关系属性,就可以快速查询了.
      * 格式:在一方添加
        * users = db.relationship("多方的模型类")
     
      * 使用格式:
        * role = Role.query.get(1)
        * users = role.users

反向查询backref属性

* 解释:如果知道了用户的情况下,能否快速查询出,哪些该用户扮演了哪个角色
- 原始查询方法:
  - user = User.query.get(1)
  - role = Role.querye.filter(Role.id == user.role_id).first()
- 快速查询:
  - 使用backref添加反向属性,就可以快速查询了
  - 格式:
    - users = db.relationship("多方的模型类",backref="role")
  - 快速查询:
    - user = User.query.get(1)
    - role = user.role

懒加载技术lazy

* 解释: 一旦使用了relationship,backref,那么系统会自动做子查询
  * 默认子查询(subquery): 查询出了一方, 就会自动的将关联的一方查询出来,会影响系统性能
  * 要设置为动态查询(dynamic): 只有用到了才去查询
* lazy使用
  * db.relationship("多方的模型类",backref="role",lazy="dynamic")

user.role.all()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flask数据库 的相关文章

  • Django 的内联管理:一个“预填充”字段

    我正在开发我的第一个 Django 项目 我希望用户能够在管理中创建自定义表单 并向其中添加字段当他或她需要它们时 为此 我在我的项目中添加了一个可重用的应用程序 可在 github 上找到 https github com stephen
  • Python 中的哈希映射

    我想用Python实现HashMap 我想请求用户输入 根据他的输入 我从 HashMap 中检索一些信息 如果用户输入HashMap的某个键 我想检索相应的值 如何在 Python 中实现此功能 HashMap
  • 安装了 32 位的 Python,显示为 64 位

    我需要运行 32 位版本的 Python 我认为这就是我在我的机器上运行的 因为这是我下载的安装程序 当我重新运行安装程序时 它会将当前安装的 Python 版本称为 Python 3 5 32 位 然而当我跑步时platform arch
  • 使用 Python 从文本中删除非英语单词

    我正在 python 上进行数据清理练习 我正在清理的文本包含我想删除的意大利语单词 我一直在网上搜索是否可以使用像 nltk 这样的工具包在 Python 上执行此操作 例如给出一些文本 Io andiamo to the beach w
  • 使用 kivy textinput 的 'input_type' 属性的问题

    您好 我在使用 kivy 的文本输入小部件的 input type 属性时遇到问题 问题是我制作了两个自定义文本输入 其中一个称为 StrText 其中设置了 input type text 然后是第二个文本输入 名为 NumText 其
  • 将 python2.7 与 Emacs 24.3 和 python-mode.el 一起使用

    我是 Emacs 新手 我正在尝试设置我的 python 环境 到目前为止 我已经了解到在 python 缓冲区中使用 python mode el C c C c将当前缓冲区的内容加载到交互式 python shell 中 显然使用了什么
  • 使用字典映射数据帧索引

    为什么不df index map dict 工作就像df column name map dict 这是尝试使用index map的一个小例子 import pandas as pd df pd DataFrame one A 10 B 2
  • 如何在 Python 中解析和比较 ISO 8601 持续时间? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 Python v2 库 它允许我解析和比较 ISO 8601 持续时间may处于不同单
  • Python beautifulsoup 仅限 1 级文本

    我看过其他 beautifulsoup 得到相同级别类型的问题 看来我的有点不同 这是网站 我正试图拿到右边那张桌子 请注意表的第一行如何展开为该数据的详细细分 我不想要那个数据 我只想要最顶层的数据 您还可以看到其他行也可以展开 但在本例
  • 从Python中的字典列表中查找特定值

    我的字典列表中有以下数据 data I versicolor 0 Sepal Length 7 9 I setosa 0 I virginica 1 I versicolor 0 I setosa 1 I virginica 0 Sepal
  • Python,将函数的输出重定向到文件中

    我正在尝试将函数的输出存储到Python中的文件中 我想做的是这样的 def test print This is a Test file open Log a file write test file close 但是当我这样做时 我收到
  • 如何通过索引列表从 dask 数据框中选择数据?

    我想根据索引列表从 dask 数据框中选择行 我怎样才能做到这一点 Example 假设我有以下 dask 数据框 dict A 1 2 3 4 5 6 7 B 2 3 4 5 6 7 8 index x1 a2 x3 c4 x5 y6 x
  • 如何使用 pybrain 黑盒优化训练神经网络来处理监督数据集?

    我玩了一下 pybrain 了解如何生成具有自定义架构的神经网络 并使用反向传播算法将它们训练为监督数据集 然而 我对优化算法以及任务 学习代理和环境的概念感到困惑 例如 我将如何实现一个神经网络 例如 1 以使用 pybrain 遗传算法
  • pyspark 将 twitter json 流式传输到 DF

    我正在从事集成工作spark streaming with twitter using pythonAPI 我看到的大多数示例或代码片段和博客是他们从Twitter JSON文件进行最终处理 但根据我的用例 我需要所有字段twitter J
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • Python:XML 内所有标签名称中的字符串替换(将连字符替换为下划线)

    我有一个格式不太好的 XML 标签名称内有连字符 我想用下划线替换它 以便能够与 lxml objectify 一起使用 我想替换所有标签名称 包括嵌套的子标签 示例 XML
  • 在 JavaScript 函数的 Django 模板中转义字符串参数

    我有一个 JavaScript 函数 它返回一组对象 return Func id name 例如 我在传递包含引号的字符串时遇到问题 Dr Seuss ABC BOOk 是无效语法 I tried name safe 但无济于事 有什么解
  • 更改 Tk 标签小部件中单个单词的颜色

    我想更改 Tkinter 标签小部件中单个单词的字体颜色 我知道可以使用文本小部件来实现与我想要完成的类似的事情 例如使单词 YELLOW 显示为黄色 self text tag config tag yel fg clr yellow s
  • 使用 z = f(x, y) 形式的 B 样条方法来拟合 z = f(x)

    作为一个潜在的解决方案这个问题 https stackoverflow com questions 76476327 how to avoid creating many binary switching variables in gekk

随机推荐

  • mysql8.0查看用户_MySQL 8.0用户和角色管理

    MySQL8 0新加了很多功能 其中在用户管理中增加了角色的管理 默认的密码加密方式也做了调整 由之前的sha1改为了sha2 同时加上5 7的禁用用户和用户过期的设置 这样方面用户的管理和权限的管理 也增加了用户的安全性 MySQL8 0
  • pytorch的序列化

    PyTorch是一个基于Python的开源机器学习框架 序列化是指将模型 张量或其他Python对象转换为一种可存储的格式 以便于在后续的时间点进行加载 重用或共享 通过序列化 可以将模型保存到磁盘上 方便后续再次加载和使用 具体来说 Py
  • 【Reacte】 React 嵌入JS表达式 、条件渲染 、数组列表渲染 、样式处理

    嵌入JS表达式 语法 js表达式 let content 插入的内容 let h1 h1 我是通过JSX创建的元素 content h1 描述 1 只要是合法的js表达式都可以进行嵌入 2 JSX自身就是JS表达式 注意 语法是单花括号 不
  • 操作系统-c语言实现空闲块表的存储空间的分配和回收 ...

    include
  • SQL查询表中最后一条数据

    SQL查询表中最后一条数据 文章目录 SQL查询表中最后一条数据 准备数据表 查询最后一条数据 准备数据表 建立student表 并插入几条数据 查询最后一条数据 本文共分为三种方式 max id 函数 select from studen
  • How to be a under-graduate student

    1 想法去搜集这种记载的文字 所以研究生要学会去搜集资料或信息 2所以我们要看很多的资料 看资料是我们研究生阶段特别重要的 不要轻视了 3 现在培养研究生 就是培养你们要勇于拓宽科技新领域 到第一线去干4论文记载了一个研究课题的过程和结论
  • 电容的频率特性曲线

    电容的频率特性曲线 电容 电容 Capacitance 亦称作 电容量 是指在给定电位差下的电荷储藏量 记为C 国际单位是法拉 F 一般来说 电荷在电场中会受力而移动 当导体之间有了介质 则阻碍了电荷移动而使得电荷累积在导体上 造成电荷的累
  • python-opencv计算重叠矩形面积IOU

    import cv2 import numpy as np def calc riou r1 r2 r1 np array r1 r2 np array r2 rect1 r1 0 r1 1 r1 2 r1 3 r1 4 rect2 r2
  • Redis第二十四讲 Redis集群如何确保数据能被插入到同一个哈希槽与集群的哈希槽为什么是16384

    为什么哈希槽是16384 Redis 集群并没有使用一致性hash 而是引入了哈希槽的概念 Redis 集群有16384个哈希槽 每个key通过CRC16校验后对16384取模来决定放置哪个槽 集群的每个节点负责一部分hash槽 但为什么哈
  • 25_Vue3路由-VueRouter的基本使用及动态路由和路由嵌套

    Vue3路由之Vue router的基本使用及路由嵌套和动态路由 认识前端路由 路由其实是网络工程中的一个术语 在架构一个网络时 非常重要的两个设备就是路由器和交换机 当然 目前在我们生活中路由器也是越来越被大家所熟知 因为我们生活中都会用
  • 代理模式 与装饰模式的区别 干货

    装饰器模式关注于在一个对象上动态的添加方法 然而代理模式关注于控制对对象的访问 换句话 说 用代理模式 代理类 proxy class 可以对它的客户隐藏一个对象的具体信息 因此 当使用代理模式的时候 我们常常在一个代理类中创建一个对象的实
  • 关于机器学习中查准率与查全率(召回率)矛盾关系的探讨

    昨天和舍友讨论查准率和查全率 很多资料中指出之所以需要F1值的原因在于准确率与召回率的关系是矛盾的 即查准率高的查全率低 查全率高的查准率低 因此需要F1值综合度量 但关于为什么两者的关系是矛盾的 一直不太理解 现在看过帖子后总结一些想法
  • ERROR: The install method you used for conda--probably either `pip install conda` or `e

    TOCERROR The install method you used for conda probably either pip install conda or easy install conda is not compatible
  • MySQL安装(全网最全最详细教程)

    目录 1 MySQL的卸载 1 1 停止MySQL服务 1 2 软件的卸载 2 MySQL的下载 安装 配置 2 1 MySQL的4大版本 2 2 软件的下载 2 3 软件的安装 2 4 软件的配置 3 多版本mysql同时安装 4 安装过
  • 西门子PLC全系列模块接线

    https www siemensplc com biancheng 10649 html
  • 最燃黑客情报官薛锋:端起AK伏特加,代表人民把坏人抓

    文 史中 一 情报专家从未凋零真相并不总是像女神一样遥不可及 在二战最为焦灼的时候 盟军迫切地想知道一件事情 德国人究竟有多少坦克 于是他们派出间谍 破译电报 对德国俘虏刑讯逼供 得出的结论是 德国每个月可以生产1000多辆坦克 可是好像哪
  • 用echo输出多个空行

    大家用shell编程 用echo输出空行的时候 通常想到就是用N个echo 如下输出三个空行 echo echo echo 虽然内心里还是觉得如上写法有些丑陋 其实 echo是还有更多用法的 这在手册里面是有说明的 通过查看手册 我们可以知
  • 深度学习系列资料总结

    作者简介 CSDN 阿里云人工智能领域博客专家 新星计划计算机视觉导师 百度飞桨PPDE 专注大数据与AI知识分享 公众号 GoAI的学习小屋 免费分享书籍 简历 导图等 更有交流群分享宝藏资料 关注公众号回复 加群 或 链接 加群 专栏推
  • opencv学习笔记

    include quickdemo h include shuzu h include
  • Flask数据库

    文章目录 一 ORM 1 1 什么是ORM 1 2 ORM的优缺点有哪些 1 3 Flask SQLAlchemy安装及设置 1 4 其他配置信息 1 5 常用的SQLAlchemy字段类型 1 6常用的SQLAlchemy列选项 常用的S