关键词:
4 数据库
知识点
- Flask-SQLALchemy安装
- 连接数据库
- 使用数据库
- 数据库迁移
- 邮件扩展
4.1 数据库的设置
Web应用中普遍使用的是关系模型的数据库,关系型数据库把所有的数据都存储在表中,表用来给应用的实体建模,表的列数是固定的,行数是可变的。它使用结构化的查询语言。关系型数据库的列定义了表中表示的实体的数据属性。比如:商品表里有name、price、number等。 Flask本身不限定数据库的选择,你可以选择SQL或NOSQL的任何一种。也可以选择更方便的SQLALchemy,类似于Django的ORM。SQLALchemy实际上是对数据库的抽象,让开发者不用直接和SQL语句打交道,而是通过Python对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升。
SQLAlchemy是一个关系型数据库框架,它提供了高层的ORM和底层的原生数据库的操作。flask-sqlalchemy是一个简化了SQLAlchemy操作的flask扩展。
数据库安装
安装服务端
sudo apt-get install mysql-server
安装客户端
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev
数据库的基本命令
登录数据库
mysql -u root -p
创建数据库,并设定编码
create database <数据库名> charset=utf8;
显示所有数据库
show databases;
在Flask中使用mysql数据库,需要安装一个flask-sqlalchemy的扩展。
pip install flask-sqlalchemy
要连接mysql数据库,仍需要安装flask-mysqldb
pip install flask-mysqldb
使用Flask-SQLAlchemy管理数据库
使用Flask-SQLAlchemy扩展操作数据库,首先需要建立数据库连接。数据库连接通过URL指定,而且程序使用的数据库必须保存到Flask配置对象的SQLALCHEMY_DATABASE_URI键中。
对比下Django和Flask中的数据库设置:
Django的数据库设置:
Flask的数据库设置:
app.config[‘SQLALCHEMY_DATABASE_URI‘] = ‘mysql://root:[email protected]:3306/test3‘
常用的SQLAlchemy字段类型
类型名 | python中类型 | 说明 |
---|---|---|
Integer | int | 普通整数,一般是32位 |
SmallInteger | int | 取值范围小的整数,一般是16位 |
BigInteger | int或long | 不限制精度的整数 |
Float | float | 浮点数 |
Numeric | decimal.Decimal | 普通整数,一般是32位 |
String | str | 变长字符串 |
Text | str | 变长字符串,对较长或不限长度的字符串做了优化 |
Unicode | unicode | 变长Unicode字符串 |
UnicodeText | unicode | 变长Unicode字符串,对较长或不限长度的字符串做了优化 |
Boolean | bool | 布尔值 |
Date | datetime.date | 时间 |
Time | datetime.datetime | 日期和时间 |
LargeBinary | str | 二进制文件 |
常用的SQLAlchemy列选项
选项名 | 说明 |
---|---|
primary_key | 如果为True,代表表的主键 |
unique | 如果为True,代表这列不允许出现重复的值 |
index | 如果为True,为这列创建索引,提高查询效率 |
nullable | 如果为True,允许有空值,如果为False,不允许有空值 |
default | 为这列定义默认值 |
常用的SQLAlchemy关系选项
选项名 | 说明 |
---|---|
backref | 在关系的另一模型中添加反向引用 |
primary join | 明确指定两个模型之间使用的联结条件 |
uselist | 如果为False,不使用列表,而使用标量值 |
order_by | 指定关系中记录的排序方式 |
secondary | 指定多对多中记录的排序方式 |
secondary join | 在SQLAlchemy中无法自行决定时,指定多对多关系中的二级联结条件 |
flask项目架构之代码抽取(代码片段)
#manage.py文件fromflask_scriptimportManagerfromflask_migrateimportMigrate,MigrateCommandfrom.infoimportapp,dbmanager=Manager(app)#用于数据库迁移Migrate(app,db)manager.add_command(‘db‘,MigrateCommand)if__name__ 查看详情
flask之视图(代码片段)
...从HelloWorld开始给路由传递参数返回状态码重定向正则URL设置cookie和获取cookie扩展上下文请求钩子Flask装饰器路由的实现Flask-Script命令行2.1从HelloWorld开始Flask程序运行过程:所有Flask程序必须有一个程序实例。Flask调用视图函数后... 查看详情
flask之邮件扩展(代码片段)
...邮件交给服务器发送。如下示例,通过开启QQ邮箱SMTP服务设置,发送邮件。fromflas 查看详情
flask基础之请求处理核心机制(代码片段)
...送HTTP,响应请求等;而web框架负责处理请求的逻辑,和数据库的交互等等,那么 查看详情
flask之日志的使用(代码片段)
...险的#ERROR=错误#WARNING=警告#INFO=信息#DEBUG=调试#NOTSET=没有设置importlogging#设置日志的记录等级logging.basicConfig(level=logging.DEBUG)#调试debug级#创建日志记录器,指明日志保存的路径、每个日志文件的最大大小、保存的日志文件个数上限f... 查看详情
flask框架之数据库扩展flask-sqlalchemy(代码片段)
一、安装扩展pipinstallflask-sqlalchemypipinstallflask-mysqldb二、SQLAlchemy常用的SQLAlchemy字段类型类型名python中类型说明Integerint普通整数,一般是32位SmallIntegerint取值范围小的整数,一般是16位BigIntegerint或long不限制精度的整数Floatfloat浮点... 查看详情
flask之数据库操作(代码片段)
4.2数据库基本操作在Flask-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。会话用db.session表示。在准备把数据写入数据库前,要先将数据添加到会话中然后调用commit()方法提交会话。数据库会话是为了保证数据的一致... 查看详情
flask之session(代码片段)
...于flask中存储不同请求间用户的信息,要使用session你必须设置一个secret_key,用于对Cookies进行密钥签名。如下:fromflaskimportFlask,render_template,session,request,redirectapp=Flask(__name__)app.secret_key=‘md_hgh58jk 查看详情
基于flask框架搭建视频网站的学习日志之数据库(代码片段)
使用Flask-SQLSlchemy管理数据库(1)——初步安装调试一、介绍:Flask-SQLSlchemy是一个Flask扩展,简化了Flask中对sql的操作,是一个高层的框架,可以避免直接接触SQL语言,就是传说中的ORM技术:Object-RelationalMapping,把关系数据库的... 查看详情
flask之分析线程和协程(代码片段)
...候数据不安全的问题。假定我们的需求是,每个线程都要设置值,并且该线程打印该线程修改的值。fromthreadingimportThread,current_threadimporttimeclassFoo(object):def__init__(self):self.name=0locals_values=Foo()deffunc(num):locals_values.name=numtime.sleep(2)#取... 查看详情
flask中之数据库框架和模型类一(代码片段)
Python数据库框架#pipinstallflask-sqlalchemy****数据库引擎URLMySQLmysql://username:[email protected]/databasePostgrespostgresql://username:[email protected]/databaseSQLite(Unix)sqlite:////absolute/path 查看详情
flask之初始化封装(代码片段)
#修改info包的init文件如下:importredisfromflaskimportFlaskfromflask_sessionimportSessionfromflask_sqlalchemyimportSQLAlchemyfromflask_wtfimportCSRFProtectfromconfigimportMyConfig#方法一,设置全局变量redis_store=None#方法二 查看详情
flask插件系列之flask_caching缓存(代码片段)
...一定的时间内直接返回结果而不是每次都需要计算或者从数据库中查找。flask_caching插件就是提供这种功能的神器。flask_caching安装pipinstallFlask-Caching初始化配置#__init__.pyfromflaskimp 查看详情
flask框架从入门到精通之模型数据库配置(代码片段)
知识点:1、数据库配置2、字段选项3、约束字段4、关系选择一、概况在Django框架中内部已经提供ORM这样的框架,来实现对象关系映射,方便我们操作数据库。如果想在Flask中也达到这样效果,需要安装一个第三方... 查看详情
flask之分析线程和协程(代码片段)
...候数据不安全的问题。假定我们的需求是,每个线程都要设置值,并且该线程打印该线程修改的值。fromthreadingimportThread,current_threadimporttimeclassFoo(object):def__init__(self):self.name=0locals_values=Foo()deffunc(num):locals_values.name=numtime.sleep(2)#取... 查看详情
python高级之flask框架(代码片段)
目录:Flask基本使用Flask配置文件Flask路由系统Flask模版Flask请求与响应Flask之SessionFlask之蓝图Flask之message中间件Flask插件一、Flask基本使用1、flask简介lask是一个基于Python开发并且依赖jinja2模板和WerkzeugWSGI服务的一个微型框架,对于W... 查看详情
flask框架从入门到精通之模型创建与添加(代码片段)
...在Flask-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。会话用db.session表示。在准备把数据写入数据库前,要先将数据添加到会话中然后调用commit()方法提交会话。数据库会话是为了保证数据的一致性,... 查看详情
flask学习之路由(代码片段)
...1‘)defdemo1(): return‘demo1‘二.常用路由设置方式@app.route(‘/user/<username>‘) #常用的 不加参数的时候默认是字符串形式的@app.route(‘/post/<int:post_id>‘) #常用的 #指定int,说明... 查看详情