【Flask】简介——05 数据库

`flask db migrate` 命令输出了 `-> 05b005cec4be (head), empty message` 【代码】`flask db migrate` 命令输出了 `-> 05b005cec4be (head), empty message` 阅读详情

引言

数据库按照一定规则保存程序数据,程序再发起查询取回所需的数据。Web 程序最常用基于关系模型的数据库,这种数据库也称为SQL 数据库,因为它们使用结构化查询语言。不过最近几年文档数据库和键值对数据库成了流行的替代选择,这两种数据库合称NoSQL数据库。

1.SQL数据库

关系型数据库把数据存储在表中,表模拟程序中不同的实体。例如,订单管理程序的数据库中可能有表customers、products 和orders。表的列数是固定的,行数是可变的。列定义表所表示的实体的数据属性。例如,customers表中可能有name、address、phone 等列。表中的行定义各列对应的真实数据。表中有个特殊的列,称为主键,其值为表中各行的唯一标识符。表中还可以有称为外键的列,引用同一个表或不同表中某行的主键。行之间的这种联系称为关系,这是关系型数据库模型的基础。

在这里插入图片描述
关系型数据库的优点是存储数据很高效,而且避免了重复。。将这个数据库中的用户角色重命名也很简单,因为角色名只出现在一个地方。一旦在roles 表中修改完角色名,所有通过role_id 引用这个角色的用户都能立即看到更新。缺点是,把数据分别存放在多个表中还是很复杂的。生成一个包含角色的用户列表会遇到一个小问题,因为在此之前要分别从两个表中读取用户和用户角色,再将其联结起来。关系型数据库引擎为联结操作提供了必要的支持。

2.NoSQL数据库

所有不遵循关系模型的数据库统称为NoSQL 数据库。NoSQL 数据库一般使用集合代替表,使用文档代替记录。NoSQL 数据库采用的设计方式使联结变得困难,所以大多数数据库根本不支持这种操作。

在这里插入图片描述
NoSQL 数据库更适合设计成上图所示的结构。这是执行反规范化操作得到的结果,它减少了表的数量,却增加了数据重复量。这种结构的数据库要把角色名存储在每个用户中。如此一来,将角色重命名的操作就变得很耗时,可能需要更新大量文档。使用NoSQL 数据库当然也有好处。数据重复可以提升查询速度。列出用户及其角色的操作很简单,因为无需联结。

3.使用SQL还是NoSQL

SQL 数据库擅于用高效且紧凑的形式存储结构化数据。这种数据库需要花费大量精力保证数据的一致性。NoSQL 数据库放宽了对这种一致性的要求,从而获得性能上的优势。对中小型程序来说,SQL 和NoSQL数据库都是很好的选择,而且性能相当。

4.Python数据库框架

大多数的数据库引擎都有对应的Python 包,包括开源包和商业包。Flask 并不限制你使用何种类型的数据库包,因此可以根据自己的喜好选择使用MySQL、Postgres、SQLite、Redis、MongoDB 或者CouchDB。如果这些都无法满足需求,还有一些数据库抽象层代码包供选择,例如SQLAlchemy 和MongoEngine。你可以使用这些抽象包直接处理高等级的Python 对象,而不用处理如表、文档或查询语言此类的数据库实体。

选择数据库框架时,你要考虑很多因素。

  • 易用性:如果直接比较数据库引擎和数据库抽象层,显然后者取胜。抽象层,也称为对象关系映射(Object-Relational Mapper,ORM) 或对象文档映射(Object-Document Mapper,ODM),在用户不知觉的情况下把高层的面向对象操作转换成低层的数据库指令。
  • 性能:ORM 和ODM 把对象业务转换成数据库业务会有一定的损耗。大多数情况下,这种性能的降低微不足道,但也不一定都是如此。一般情况下,ORM 和ODM 对生产率的提升远远超过了这一丁点儿的性能降低,所以性能降低这个理由不足以说服用户完全放弃ORM 和ODM。真正的关键点在于如何选择一个能直接操作低层数据库的抽象层,以防特定的操作需要直接使用数据库原生指令优化。
  • 可移植性:选择数据库时,必须考虑其是否能在你的开发平台和生产平台中使用。例如,如果你打算利用云平台托管程序,就要知道这个云服务提供了哪些数据库可供选择。可移植性还针对ORM 和ODM。尽管有些框架只为一种数据库引擎提供抽象层,但其他框架可能做了更高层的抽象,它们支持不同的数据库引擎,而且都使用相同的面向对象接口。SQLAlchemy ORM 就是一个很好的例子,它支持很多关系型数据库引擎,包括流行的MySQL、Postgres 和SQLite。
  • FLask集成度:选择框架时,你不一定非得选择已经集成了Flask 的框架,但选择这些框架可以节省你编写集成代码的时间。使用集成了Flask 的框架可以简化配置和操作,所以专门为Flask 开发的扩展是你的首选。

基于以上因素,我们选择使用的数据库框架是Flask-SQLAlchemy(http://pythonhosted.org/Flask-SQLAlchemy/),这个Flask 扩展包装了SQLAlchemy(http://www.sqlalchemy.org/)框架。

5.使用Flask-SQLAlchemy管理数据库

Flask-SQLAlchemy 是一个Flask 扩展,简化了在Flask 程序中使用SQLAlchemy 的操作。SQLAlchemy 是一个很强大的关系型数据库框架,支持多种数据库后台。SQLAlchemy 提供了高层ORM,也提供了使用数据库原生SQL 的低层功能。和其他大多数扩展一样,Flask-SQLAlchemy 也使用pip 安装:

(venv) $ pip install flask-sqlalchemy

在Flask-SQLAlchemy 中,数据库使用URL 指定。最流行的数据库引擎采用的数据库URL格式如表所示。
在这里插入图片描述
在这些URL 中,hostname 表示MySQL 服务所在的主机,可以是本地主机(localhost),也可以是远程服务器。数据库服务器上可以托管多个数据库,因此database 表示要使用的数据库名。如果数据库需要进行认证,username 和password 表示数据库用户密令。SQLite 数据库不需要使用服务器,因此不用指定hostname、username 和password。URL 中的database 是硬盘上文件的文件名。

程序使用的数据库URL 必须保存到Flask 配置对象的SQLALCHEMY_DATABASE_URI 键中。配置对象中还有一个很有用的选项,即SQLALCHEMY_COMMIT_ON_TEARDOWN 键,将其设为True时,每次请求结束后都会自动提交数据库中的变动。其他配置选项的作用请参阅Flask-SQLAlchemy 的文档。下面的示例展示了如何初始化及配置一个简单的SQLite 数据库。

from flask.ext.sqlalchemy import SQLAlchemy

basedir = os.path.abspath(os.path.dirname(__file__))

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] =\'sqlite:///' + os.path.join(basedir, 'data.sqlite')
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True

db = SQLAlchemy(app)

db 对象是SQLAlchemy 类的实例,表示程序使用的数据库,同时还获得了Flask-SQLAlchemy提供的所有功能。

6.定义模型

模型这个术语表示程序使用的持久化实体。在ORM 中,模型一般是一个Python 类,类中的属性对应数据库表中的列。Flask-SQLAlchemy 创建的数据库实例为模型提供了一个基类以及一系列辅助类和辅助函数,可用于定义模型的结构。SQL数据库示例中的roles 表和users 表可定义为模型Role 和User,如下代码所示:

class Role(db.Model):
	__tablename__ = 'roles'
	id = db.Column(db.Integer, primary_key=True)
	name = db.Column(db.String(64), unique=True)
	
	def __repr__(self):
		return '<Role %r>' % self.name
	
class User(db.Model):
	__tablename__ = 'users'
	id = db.Column(db.Integer, primary_key=True)
	username = db.Column(db.String(64), unique=True, index=True)
	
	def __repr__(self):
		return '<User %r>' % self.username

Flask-SQLAlchemy 要求每个模型都要定义主键,这一列经常命名为id。虽然没有强制要求,但这两个模型都定义了__repr()__ 方法,返回一个具有可读性的字符串表示模型,可在调试和测试时使用。

类变量__tablename__ 定义在数据库中使用的表名。如果没有定义__tablename__,FlaskSQLAlchemy 会使用一个默认名字,但默认的表名没有遵守使用复数形式进行命名的约定,所以最好由我们自己来指定表名。其余的类变量都是该模型的属性,被定义为db.Column
类的实例。db.Column 类构造函数的第一个参数是数据库列和模型属性的类型。下表列出了一些可用的列类型以及在模型中使用的Python 类型。

在这里插入图片描述
db.Column 中其余的参数指定属性的配置选项。下表列出了一些可用选项。

在这里插入图片描述

7.关系

关系型数据库使用关系把不同表中的行联系起来。SQL数据库的示例关系图表示用户和角色之间的一种简单关系。这是角色到用户的一对多关系,因为一个角色可属于多个用户,而每个用户都只能有一个角色。该一对多关系在模型类中的表示方法如下代码所示:

class Role(db.Model):
	# ...
	users = db.relationship('User', backref='role')

class User(db.Model):
	# ...
	role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))

关系使用users 表中的外键连接了两行。添加到User 模型中的role_id 列被定义为外键,就是这个外键建立起了关系。传给db.ForeignKey()的参数roles.id 表明,这列的值是roles 表中行的id 值。添加到Role 模型中的users 属性代表这个关系的面向对象视角。对于一个Role 类的实例,其users 属性将返回与角色相关联的用户组成的列表。db.relationship() 的第一个参数表明这个关系的另一端是哪个模型。如果模型类尚未定义,可使用字符串形式指定。db.relationship() 中的backref 参数向User 模型中添加一个role 属性,从而定义反向关系。这一属性可替代role_id 访问Role 模型,此时获取的是模型对象,而不是外键的值。

大多数情况下,db.relationship() 都能自行找到关系中的外键,但有时却无法决定把哪一列作为外键。例如,如果User 模型中有两个或以上的列定义为Role 模型的外键,SQLAlchemy 就不知道该使用哪列。如果无法决定外键,你就要为db.relationship() 提供额外参数,从而确定所用外键。下表列出了定义关系时常用的配置选项。

选项名说明
backref在关系的另一个模型中添加反向引用
primaryjoin明确指定两个模型之间使用的联结条件。只在模棱两可的关系中需要指定
lazy指定如何加载相关记录。可选值有select(首次访问时按需加载)、immediate(源对象加载后就加载)、joined(加载记录,但使用联结)、subquery(立即加载,但使用子查询),noload(永不加载)和dynamic(不加载记录,但提供加载记录的查询)
uselist如果设为Fales,不使用列表,而使用标量值
order_by指定关系中记录的排序方式
secondary指定多对多关系中关系表的名字
secondaryjoinSQLAlchemy 无法自行决定时,指定多对多关系中的二级联结条件

除了一对多之外,还有几种其他的关系类型。

  • 一对一关系可以用前面介绍的一对多关系表示,但调用db.relationship() 时要把uselist 设为False,把“多”变成“一”。
  • 多对一关系也可使用一对多表示,对调两个表即可,或者把外键和db.relationship() 都放在“多”这一侧。
  • 最复杂的关系类型是多对多,需要用到第三张表,这个表称为关系表。

8.数据库操作

现在模型已经按照示例的SQL数据库关系图完成配置,可以随时使用了。学习如何使用模型的最好方法是在Python shell 中实际操作。

(1)创建表

首先,我们要让Flask-SQLAlchemy 根据模型类创建数据库。方法是使用db.create_all()函数:

(venv) $ python hello.py shell
>>> from hello import db
>>> db.create_all()

如果你查看程序目录,会发现新建了一个名为data.sqlite 的文件。这个SQLite 数据库文件的名字就是在配置中指定的。如果数据库表已经存在于数据库中,那么db.create_all()不会重新创建或者更新这个表。如果修改模型后要把改动应用到现有的数据库中,这一特性会带来不便。更新现有数据库表的粗暴方式是先删除旧表再重新创建:

>>> db.drop_all()
>>> db.create_all()

遗憾的是,这个方法有个副作用,它把数据库中原有的数据都销毁了。

(2)插入行
>>> from hello import Role, User
>>> admin_role = Role(name='Admin')
>>> mod_role = Role(name='Moderator')
>>> user_role = Role(name='User')
>>> user_john = User(username='john', role=admin_role)
>>> user_susan = User(username='susan', role=user_role)
>>> user_david = User(username='david', role=user_role)

模型的构造函数接受的参数是使用关键字参数指定的模型属性初始值。注意,role 属性也可使用,虽然它不是真正的数据库列,但却是一对多关系的高级表示。这些新建对象的id属性并没有明确设定,因为主键是由Flask-SQLAlchemy 管理的。现在这些对象只存在于Python 中,还未写入数据库。因此id 尚未赋值。

通过数据库会话管理对数据库所做的改动,在Flask-SQLAlchemy 中,会话由db.session表示。

  • 数据库会话db.session 和Flask session 对象没有关系。数据库会话也称为事务。
  • 数据库会话能保证数据库的一致性。提交操作使用原子方式把会话中的对象全部写入数据库。如果在写入会话的过程中发生了错误,整个会话都会失效。如果你始终把相关改动放在会话中提交,就能避免因部分更新导致的数据库不一致性。
  • 数据库会话也可回滚。调用db.session.rollback() 后,添加到数据库会话中的所有对象都会还原到它们在数据库时的状态。

准备把对象写入数据库之前,先要将其添加到会话中(2种方式):

>>> db.session.add(admin_role)
>>> db.session.add(mod_role)
>>> db.session.add(user_role)
>>> db.session.add(user_john)
>>> db.session.add(user_susan)
>>> db.session.add(user_david)

>>> db.session.add_all([admin_role, mod_role, user_role,... user_john, user_susan, user_david])

为了把对象写入数据库,我们要调用commit() 方法提交会话:

>>> db.session.commit()

可以查看id 属性值:

>>> print(admin_role.id)
1
(3)修改、删除行
  • 在数据库会话上调用add() 方法也能更新模型。
  • 数据库会话还有个delete() 方法。删除与插入和更新一样,提交数据库会话后才会执行。
>>> admin_role.name = 'Administrator'
>>> db.session.add(admin_role)
>>> db.session.commit()

>>> db.session.delete(mod_role)
>>> db.session.commit()
(4)查询行
  • query 对象: Flask-SQLAlchemy 为每个模型类都提供了query 对象。最基本的模型查询是取回对应表中的所有记录:

    >>> Role.query.all()
    [<Role u'Administrator'>, <Role u'User'>]
    >>> User.query.all()
    [<User u'john'>, <User u'susan'>, <User u'david'>]
    
  • 过滤器: 使用过滤器可以配置query 对象进行更精确的数据库查询。filter_by() 等过滤器在query 对象上调用,返回一个更精确的query 对象。多个过滤器可以一起调用,直到获得所需结果。下面这个例子查找角色为"User" 的所有用户:

    >>> User.query.filter_by(role=user_role).all()
    [<User u'susan'>, <User u'david'>]
    

    下表列出了可在query 对象上调用的常用过滤器。完整的列表参见SQLAlchemy 文档(http://docs.sqlalchemy.org)。

在这里插入图片描述

  • 过滤后触发查询执行的方法: 在查询上应用指定的过滤器后,通过调用all() 执行查询,以列表的形式返回结果。除了all() 之外,还有其他方法能触发查询执行。下表列出了执行查询的其他方法。

在这里插入图片描述

  • 查询关系: 关系和查询的处理方式类似。下面这个例子分别从关系的两端查询角色和用户之间的一对多关系:
    >>> users = user_role.users
    >>> users
    [<User u'susan'>, <User u'david'>]
    >>> users[0].role
    <Role u'User'>
    
    这个例子中的user_role.users 查询有个小问题。执行user_role.users 表达式时,隐含的查询会调用all() 返回一个用户列表。query 对象是隐藏的,因此无法指定更精确的查询过滤器。就这个特定示例而言,返回一个按照字母顺序排序的用户列表可能更好。在下面的代码中,我们修改了关系的设置,加入了lazy = ‘dynamic’ 参数,从而禁止自动执行查询(配置关系之后,user_role.users 会返回一个尚未执行的查询,因此可以在其上添加过滤器)。
    class Role(db.Model):
    	# ...
    	users = db.relationship('User', backref='role', lazy='dynamic')
    	# ...
    
    >>> user_role.users.order_by(User.username).all()
    [<User u'david'>, <User u'susan'>]
    >>> user_role.users.count()
    2
    
  • 查看生成的原生SQL 查询语句: 只需把query 对象转换成字符串:
    >>> str(User.query.filter_by(role=user_role))
    'SELECT users.id AS users_id, users.username AS users_username,
    users.role_id AS users_role_id FROM users WHERE :param_1 = users.role_id'
    
  • 退出shell会话: 如果退出了shell 会话,前面这些例子中创建的对象就不会以Python 对象的形式存在,而是作为各自数据库表中的行。如果你打开了一个新的shell 会话,就要从数据库中读取行,再重新创建Python 对象。下面这个例子发起了一个查询,加载名为"User" 的用户角色:
    >>> user_role = Role.query.filter_by(name='User').first()
    

9.在视图函数中操作数据库

hello.py:在视图函数中操作数据库。

@app.route('/', methods=['GET', 'POST'])
def index():
	form = NameForm()
	if form.validate_on_submit():
		user = User.query.filter_by(username=form.name.data).first()
		if user is None:
			user = User(username = form.name.data)
			db.session.add(user)
			session['known'] = False
		else:
			session['known'] = True
		session['name'] = form.name.data
		form.name.data = ''
		return redirect(url_for('index'))
	return render_template('index.html',form = form, name = session.get('name'),known = session.get('known', False))

提交表单后,程序会使用filter_by() 查询过滤器在数据库中查找提交的名字。变量known 被写入用户会话中,因此重定向之后,可以把数据传给模板,用来显示自定义的欢迎消息。注意,要想让程序正常运行,你必须按照前面介绍的方法,在Python shell 中创建数据库表。

10.集成Python shell

每次启动shell 会话都要导入数据库实例和模型。为了避免一直重复导入,我们可以做些配置,让Flask-Script 的shell 命令自动导入特定的对象。若想把对象添加到导入列表中,我们要为shell 命令注册一个make_context 回调函数。
hello.py:为shell 命令添加一个上下文

from flask.ext.script import Shell

def make_shell_context():
	return dict(app=app, db=db, User=User, Role=Role)
	
manager.add_command("shell", Shell(make_context=make_shell_context))

make_shell_context() 函数注册了程序、数据库实例以及模型,因此这些对象能直接导入shell:

$ python hello.py shell
>>> app
<Flask 'app'>
>>> db
<SQLAlchemy engine='sqlite:////home/flask/flasky/data.sqlite'>
>>> User
<class 'app.User'>
Django和Flask的数据库迁移 为什么需要数据库迁移? 在很多时候,在我们设计好模型之后,又需要进行一定的改变和更新数据操作,最直接的方式就是删除原来的旧表,但是随之而来的问题就是我们之前的数据也会删除;那怎么办呢,这时候就需要数据库迁移框架了。 Django的数据库迁移 框架内部就集成了数据库迁移模块 命令 以下是几个常用的与迁移交互的命令,即 Django 处理数据库架构的方式: migrate,负责应用和撤销迁移。 makemigrations,基于模型的修改创建迁移。 sqlmigrate,展示迁移使用的 SQL 语句。 show 阅读详情

相关推荐

数据库2005

24小时自学SQL2005,让你快速掌握数据库的精髓,成就你的数据库工程师之梦

创建数据库、管理数据库

一、实验目的 1. 熟悉SQL SERVER 2005企业管理器、查询分析器的基本使用方法。 2.了解SQL SERVER 2005数据库的逻辑结构和物理结构及其结构特点。 3.掌握在企业管理器中创建数据库、删除数据库。 4.掌握在SQL Server查询分析器中创建数据库、删除数据库。 二、实验工具 计算机(Pentium4,128M内存,Intel兼容机、WIN7环境)、SQL Server 2005软件。 三、实验原理 使用SQL SERVER 2005提供的各种常用管理工具进行有关的操作。 四、

weixin_50464560的博客 2719

5G物理层基础知识

1、关于RB和RE (1) RB(Resource Block,资源块)频率上连续12个子载波,时域上一个slot(时隙,14个ofdm符号) (2) RE(Resource Element,资源单元)频率上一个子载波,及时域上一个ofdm符号 注意:协议规定,5G每个时隙(非扩展CP)的符号数为14个(扩展CP情况下每个时隙有12个符号),而LTE(非扩展CP)每个时隙的符号数为7个。 简单说:一个12X14的方格,大的整个叫一个RB,每一个小块叫一个RE。另外,一个RE可存放一个调制符号(mo.

qq_39074243的博客 2万+

05-数据库_数据库基础

一,认识MySQL数据库 1,什么是数据库 数据库(Database)就是按照数据结构来组织,存储和管理数据的仓库 专业的数据库是专门对数据进行创建,访问,管理,搜索等操作的软件,比起我们自己用文件读写的方 式对象数据进行管理更加的方便,快速,安全 2,作用 对数据进行持久化的保存 方便数据的存储和查询,速度快,安全,方便 可以处理并发访问 更加安全的权限管理访问机制 3,常见的数据库 数据库分两大类,一类是 关系型数据库。另一类叫做 非关系型数据库。 关系型数据库...

&再见萤火虫&的博客 2006

【VMware篇】7-通过ISO镜像升级VMware Esxi

本文主要介绍Dell服务器上安装的ESXi升级的方法之一(采用ISO升级)。

chen_yunan的博客 5515

别再只用线性回归了!用sklearn的核岭回归搞定非线性数据(附RBF核调参实战)

本文详细介绍了如何使用sklearn的核岭回归处理非线性数据,特别是RBF核的应用与调参实战。通过网格搜索找到最佳参数组合,核岭回归能有效捕捉数据中的复杂波动,显著提升模型性能。适合需要解决非线性问题的数据科学家和机器学习工程师。

weixin_34246529的博客 336

数据库05

子查询   子查询指的是当一条查询语句被当作另一个查询语句的条件时,该查询语句就称之为子查询(内层查询)   子查询可以将一个大问题拆分为几个小的问题,然后一步一步来查询   语法:将子查询(内层查询)用括号包裹即可 用户管理   mysql用户指的是客户端连接服务器时使用账户   在一些公司中,有很多项目的数据,可能会放在同一个服务器   那就必须要为每一个用户明确器所用于的权限 ...

weixin_30703911的博客 143

大唐豪侠服务器列表文件格式错误,关于大唐豪侠一键端的一些问题心得

有人问了大唐豪侠架设方面的问题,我简单研究了一下,做了个整理,现放出来大家一起研究讨论,我是把服务端的解压到了D盘里面了。第一个问题:架设成功后,运行客户端提示获取服务器列表失败,这个原因是因为压缩的一键端是整理过的,我们需要把服务器列表等解压出来,详见截图首先到这个目录里面找到package.zip,找到这个以后这里要注意,解压路径里面一定不要有package,这个解压成功后就有了服务列表等...

weixin_42530536的博客 1528

Sql Server2005创建数据库

若要创建数据库,必须确定数据库的名称、所有者、大小,以及存储该数据库的文件和文件组。 在创建数据库之前,应注意下列事项: ● 若要创建数据库,必须至少拥有CREATE DATABASE、CREATE ANY DATABASE或ALTER ANY DATABASE权限。 ● 在SQL Server 2005中,对各个数据库的数据和日志文件设置了某些权限。如果这些文件位于具有打开权限的目录中,那么以上...

平行宇宙i的博客 7986

哨兵一号burst数据的下载和处理

在Sentinel - 1数据处理领域,其基本流程起始于从(ASF)下载原始压缩文件。这些文件规模颇为可观,常规大小约4GB,而部分数据的原文件甚至已攀升至7GB,对存储空间提出了严苛要求。从影像构成来看,每景Sentinel - 1影像由三个干涉宽幅(IW)模式子带组成,每个IW一般包含9个脉冲串(burst)。然而,在实际研究中,我们所关注的研究区域往往仅占据其中寥寥几个burst。

kangkangluoluo的博客 1965

T100批处理作业开发

g_bgjob = ‘Y’ 后台执行g_bgjob = ‘N’ 前台执行。

weixin_43400895的博客 585

flask毕设超市购物数据管理系统(论文+程序)

因此,本选题将以中小型超市为研究情景,重点分析和研究如何构建一个高效、易用的超市购物数据管理系统,以期探寻数据管理的最佳实践,提高超市的运营效率和顾客满意度,为后续更加深入的研究提供基础。理论意义在于,通过对超市购物数据管理系统的深入剖析,可以丰富和完善零售业数据管理的理论体系,为相关领域的研究提供新的视角和方法。首先,通过软件工程方法,对超市购物数据管理系统的需求进行分析和设计,确保系统的实用性和可行性。通过这些模块的设计和实现,构建一个功能完善、操作简便的超市购物数据管理系统。

zhihao503的博客 1062

Yolov8损失函数改进:MPDIoU新型边界框相似度度量,效果秒杀GIoU 、 DIoU 、CIoU 、 EIoU等 | ELSEVIER 2023

ELSEVIER 2023 MPDIoU新型边界框相似度度量助力yolov8,适用提升小目标、遮挡物性能提升

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 7775

flask入门的教程-数据库 Database

文章转自 :https://github.com/WapeYang/The-Flask-Mega-Tutorial/blob/master/database.rst 感谢原作者的付出 转载时间为:2014-05-06

最近学习openerp 期待交流 2249

《QGIS快速入门与应用基础》223:纸张大小与方向(A4/A3/自定义)

本文详细介绍了QGIS布局页面设置的核心操作,重点讲解了纸张大小与方向的设置方法。文章首先指出页面设置是地图排版的基础前提,强调合理设置可避免导出打印时出现尺寸不符等问题。随后详细说明了三种打开页面设置面板的方式,并重点解析了纸张设置的要点:标准预设纸张(A4/A3等)适用于大多数场景,提供国内常用规格对照表;自定义纸张则需谨慎使用,需注意单位选择和尺寸限制。通过界面标注图和操作步骤示意图,帮助用户掌握正确的设置方法,确保最终出图符合规范要求。文章特别提醒新手要优先使用标准预设纸张,避免常见错误,为后续地图

LuckyHanMo的博客 344

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Python Web 框架-FLASK day05

  目录   1.FLASK-SQLALCHEMY - 查询 2.FLASK-SQLALCHEMY - 删除 和 修改 3.FLASK-SQLALCHEMY - 关系映射 day04回顾 1.模型   使用名为SQLAlchemy的ORM框架,并且需要 Flask-SQLAlchemy   配置     from flask_sqlalchemy import SQLAlchemy ...

时光 613

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

flask学习05 数据模型

数据模型 数据库回顾 分类 关系型数据库:MySQL、Oracle、SQLite、... 非关系型数据库:MongoDB、Redis、... 选择 数据库没有好坏,要根据项目需求进行选择;盲目的评价或跟风只能证明你是个生瓜蛋 flask-sqlalchemy 说明:提供了大多数关系型数据库的支持,而且提供了ORM 安装:pip instal

joe_niu的博客 515

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Flask框架初学-05-命令管理Manager及数据库的使用

flask-Manager命令管理即数据库

weixin_42724501的博客 2643

05解决flask循环引用的问题

1, 什么是循环引用问题?为什么会导致循环引用? 1.1先讲是什么? 主文件中class类过多会导致主文件冗余,如下图,所以我们单独给class类一个文件,然后再引用它。 1.2再讲为什么? 主文件为models_sep.py文件, models.py文件为: 可以看到,models.py文件要从主文件models_sep.py中引用生成的db,即“...

weixin_30855761的博客 607

05-Flask数据库集成ORM与迁移管理深度解析

"""抽象基类模型"""__abstract__ = True # 声明为抽象基类,不创建表"""保存模型实例""""""删除模型实例""""""根据ID查询""""""查询所有记录""""""转换为字典""""""约束演示模型"""# 表级主键约束(复合主键)# )# 表级唯一约束# 单列唯一约束(也可以在Column中使用unique=True)# 复合唯一约束# 检查约束# 索引定义。

oZiDingXiang的博客 584

python+flask计算机毕业设计实验数据管理系统(程序+开题+论文)

六是通知公告模块,用于发布实验安排、教学通知、系统更新等重要信息,确保信息的广泛传播与及时获取。该系统将围绕学生、教师、实验任务、实验报告、批阅报告、通知公告等核心功能模块展开,旨在通过信息化手段解决当前实验数据管理中存在的问题,提升实验教学管理的智能化水平。传统的实验数据管理方式多采用纸质记录或简单的电子文档存储,这种方式不仅效率低下,易出错,且难以实现数据的快速检索、共享与长期保存。同时,学生、教师及实验任务之间的信息交流不畅,导致实验进度管理混乱,实验报告批阅周期长,影响了教学质量和科研效率。

891

flask学习05

flask05 文章目录flask05一、sqlalchemy1.懒查询2.反向引用二、数据迁移四、蓝图五、Redis1.nosql介绍2.Redis简介3.Redis 优势4.Redis应用场景5.Redis安装6.核心配置选项7.服务端8.客户端9.python交互六、Git1. Git介绍2.生成版本(重点)3.版本操作 一、sqlalchemy 1.懒查询 解决问题:关系属性默认会将所有...

qq_37613223的博客 610

flask连接mysql数据库_Flask与Mysql数据库建立连接

该开始学习Flask,接触到数据库方面,记录一点儿笔记,希望有用。环境:python3.7.7,flask1.1.2与数据库建立联系,需要在自己的虚拟环境中pip install :flask-script,pymysql,flask-sqlalchemy,flask-imgrate(4个库)1.Flask-Script扩展提供向Flask插入外部脚本的功能,内置命令shell和runserver...

weixin_34268604的博客 1511

Flask狼书笔记 | 05_数据库

本章是对于在Python中使用数据库的一个整体简单介绍。文章目录:5.1 数据库的分类 5.2 ORM 5.3 使用Flask_SQLAlchemy 5.4 数据库操作 5.5 定义关系 5.6 更新数据库表 5.7 数据库进阶 小结

成长之路 950

flask05 Flask Model

Flask Model 使用ORM的原因: 随着项目越来越大 使用原生sql就会出现如下问题 SQL语句重复使用率不高 越复杂的sql语句就越长 会出现很多类似的SQL语句 并且不易读 很多SQL语句都是在业务逻辑中拼接出来的 如果数据库需要更改 就要修改这些逻辑 就会漏掉对某些SQL语句的更改 容易忽略WEB安全问题(SQL注入) 好处: 易用性 可以有效的减少SQL语句的重复性...

jokerBi的博客 3385

flask中的操作数据库的插件Flask-SQLAlchemy

Web 开发中,一个重要的组成部分便是数据库了。Web 程序中最常用的莫过于关系型数据库了,也称 SQL 数据库。另外,文档数据库(如 mongodb)、键值对数据库(如 redis)近几年也逐渐在 web 开发中流行起来,我们习惯把这两种数据库称为 NoSQL 数据库。大多数的关系型数据库引擎(比如 MySQL、Postgres 和 SQLite)都有对应的 Python 包。

javascript_good的博客 972
上一篇: Python深度学习——卷积神经网络简介
下一篇: 《Python深度学习》文章地图
SuperWiwi
博客等级 码龄10年 316粉丝 284原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值