Flask 数据库集成的介绍

目录
  • 1、使用Flask-SQLAlchemy管理数据库
    • 1.1 配置Flask_SQLAlchemy
    • 1.2 定义数据库模型
    • 1.3 创建数据库和表
    • 1.4 数据库操作
      • 1.4.1 Create
      • 1.4.2 Read
      • 1.4.3 Update
      • 1.4.4 Delete
      • 1.4.5 在视图函数里操作数据库

前言:

数据库是大多数 Web 应用的基础设施,只要想把数据存储下来,就离不开数据库,下面将一起学习一下如何给 Flask 应用添加数据库支持。

1、使用Flask-SQLAlchemy管理数据库

Flask-SQLAlchemy 集成了 SQLAlchemy,它简化了连接数据库服务器、管理数据库及操作会话等各类工作,让 Flask 更方便的进行数据存储及处理,我们不必过多关心原生 SQL 语句,只需要使用 Python 类就可以轻松的完成对数据库表的增删改查操作,并且该插件还支持多种数据库类型,如MySQLPostgreSQL、和SQLite等。

我们可以使用pip install flask-sqlalchemy进行安装。

1.1 配置Flask_SQLAlchemy

下面以 SQLite 数据库为例,Flask-SQLAlchemy 数据库的 url 通过配置变量SQLALCHEMY_DATABASE_URI指定,通过 Flask-SQLAlchemy 提供的 SQLAlchemy 类传入 Flask 的实例 app,创建 db 实例,表示程序使用的数据库,这个 db 对象能够使用 Flask-SQLAlchemy 的所有功能。

from flask import Flask

from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

basedir = os.path.abspath(app.root_path)

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data.db')

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

其中,SQLALCHEMY_TRACK_ MODIFICATIONS配置变量表示是否追踪对象的修改,在此设为False

1.2 定义数据库模型

所谓数据模型,就是用来映射数据库表的 Python 类,一个数据模型类对应数据库中的一个表,类的属性代表数据库表的字段。所有的模型类都需要继承 Flask-SQLAlchemy 提供db.Model基类。

新建model.py文件,定义User类如下:

from app import db

class User(db.Model):

    id = db.Column(db.Integer, primary_key=True)

    user_name = db.Column(db.String)

    password = db.Column(db.String)

1.3 创建数据库和表

运行 Flask 应用,然后在终端中输入flask shell命令,进入 Python 交互环境

如下所示:

>>> from app import db  # 从app.py中导入db实例

>>> from model import *  # 从model.py中导入所有模型类

>>> db.create_all()  # 用db.create_all()创建数据库表 

执行完之后,会在项目根目录生成一个data.db库文件。 注意: 数据库和表一旦创建后,之后对模型类的改动不会自动作用到实际的表中,比如,在模型类中添加或删除字段,修改字段的名称和类型,再次调用db.create_all()不会重新创建表或是更新表,只有通过db.drop_all()删除数据库中所有的表之后再调用db.create_all()才能重新创建表,

那么就会出现这么一个问题:

这样操作的话,数据库表被删除重建了,那表中原有的数据也都没有了,这肯定是不行的,这时就出现了数据库迁移的概念,先留个坑,下篇文章介绍。

1.4 数据库操作

现在我们创建了模型,也生成了数据库和表,接下来就来学习一下常用的数据库操作。数据库操作主要是CRUDCreate 创建、Read 读取/查询、 Update 更新、Delete 删除)。

1.4.1 Create

添加一条记录到数据库中,主要分为以下三步:

  • 使用 Python 模型类创建对象作为一条记录
  • 添加新创建的对象到数据库会话中
  • 提交数据库会话

如下,在上面的交互环境下,创建一个新用户:

>>> from app import db  # 从app.py中导入db实例

>>> from model import User   # 导入模型类User

>>> user1=User(user_name='tigeriaf', password='123456')  # 创建用户1

>>> user2=User(user_name='admin', password='123456')  # 创建用户2

# 添加新创建的对象到数据库会话中

>>> db.session.add(user1)

>>> db.session.add(user2)

# 将数据库会话提交,数据写入data.db文件

>>> db.session.commit()

# 测试

>>> print(user1.id)

1

>>> print(user2.id)

2

另外,除了依次调用add()方法添加记录,也可以使用add_all()一次添加包含多个模型类对象的列表。

1.4.2 Read

使用模型类

提供的 query 属性 通过模型类提供的 query 属性附加调用各种过滤方法可以查询数据库表的数据,

查询模式如下:

<模型类>.query.<过滤方法>.<查询方法>

从某个模型类出发,通过在 query 属性对应的 Query 对象上附加的过滤方法和查询函数对模型类对应的表中的记 进行各种筛选等,最终返回包含对应数据库记录数据的模型类实例,对返回的实例调用属性即可获取对应的字段数据。

# 查询全部

>>> User.query.all()

[<User 1>, <User 2>]

# 查询指定id的记录

>>> user1=User.query.get(1)

>>> user1.user_name

'tigeriaf'

# 查询条数

>>> User.query.count()

2

# 查询user_name为admin的用户

>>> User.query.filter_by(user_name='admin').all()

[<User 2>]

SQLAlcherny 提供了很多过滤方法,使用这些过滤方法可以获取更精确的查询,这里就不展开了。 完整的查询、过滤方法可以查看:The Query Object

1.4.3 Update

更新一条记录非常简单,直接给模型类的属性附上新的值,然后调用commit()方法提交会话即可。 如下,修改 id 2 的用户的用户名 user_name

>>> user2=User.query.get(2)

>>> user2.user_name

'admin'

>>> user2.user_name='张三'

>>> db.session.commit()

>>> user2.user_name

'张三'

1.4.4 Delete

使用delete()进行数据记录的删除,如下:

>>> db.session.delete(user2)

>>> db.session.commit()

>>> user2=User.query.get(2)

>>> print(user2)

None

1.4.5 在视图函数里操作数据库

在视图函数里操作数据库的方式在 Python Shell 交互环境下大致是相同的,无非就是多了从请求对象获取数据及验证数据的步骤,

如下一个案例:

@app.route('/user', methods=['GET', 'POST'])

def user():

    if request.method == 'POST':

        user_name = request.form['user_name']

        password = request.form['password']

        user = User(user_name=user_name, password=password)

        db.session.add(user)

        db.session.commit()

        return 'user:{} add success! id:{}'.format(user_name, user.id)

    else:

        user_id = request.args.get('user_id')

        user = User.query.get(user_id)

        if user:

            return 'Hello user:{}!'.format(user.user_name)

        else:

            return 'failed'

上述代码中,视图函数 user 接受两种方式的请求,分别完成添加用户、查询用户的功能,将接收数据存储在数据库中。

发送请求测试如下:

到此这篇关于 Flask 数据库集成的介绍的文章就介绍到这了,更多相关 Flask 数据库集成内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • flask框架实现连接sqlite3数据库的方法分析

    本文实例讲述了flask框架实现连接sqlite3数据库的方法.分享给大家供大家参考,具体如下: 1. 在flask文件夹中新建一个models.py文件用来定义模型,内部代码如下 import sqlite3 #导入sqlite3包 def get_conn(): #定义该函数用来连接数据库 return sqlite3.connect("test.db") class User(object): def __init__(self,id,name): self.id = id se

  • flask 框架操作MySQL数据库简单示例

    本文实例讲述了flask 框架操作MySQL数据库.分享给大家供大家参考,具体如下: 一.创建数据库表格 """ Created on 19-10-8 @requirement:Anaconda 4.3.0 (64-bit) Python3.6 @description:创建表格 """ import pymysql server = '127.0.0.1' user = 'root' password = 'password' # 连接数据库

  • Python web框架(django,flask)实现mysql数据库读写分离的示例

    读写分离,顾名思义,我们可以把读和写两个操作分开,减轻数据的访问压力,解决高并发的问题. 那么我们今天就Python两大框架来做这个读写分离的操作. 1.Django框架实现读写分离 Django做读写分离非常的简单,直接在settings.py中把从机加入到数据库的配置文件中就可以了. DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST': '127.0.0.1', # 主服务器的运行ip 'PORT':

  • Flask框架使用DBUtils模块连接数据库操作示例

    本文实例讲述了Flask框架使用DBUtils模块连接数据库的操作方法.分享给大家供大家参考,具体如下: Flask连接数据库 数据库连接池: Django使用:django ORM(pymysql/MySqldb) Flask/其他使用: -原生SQL         -pymysql(支持python2/3)         -MySqldb(支持python2)     -SQLAchemy(ORM) 原生SQL 需要解决的问题: -不能为每个用户创建一个连接         -创建一定数

  • Python框架Flask的基本数据库操作方法分析

    本文实例讲述了Python框架Flask的基本数据库操作方法.分享给大家供大家参考,具体如下: 数据库操作在web开发中扮演着一个很重要的角色,网站中很多重要的信息都需要保存到数据库中.如用户名.密码等等其他信息.Django框架是一个基于MVT思想的框架,也就是说他本身就已经封装了Model类,可以在文件中直接继承过来.但是在Flask中,并没有把Model类封装好,需要使用一个扩展包,Flask-SQLAlchemy.它是一个对数据库的抽象,让开发者不用这些编写SQL语句,而是使用其提供的接

  • 如何使用Flask-Migrate拓展数据库表结构

    前言 在我们用 sqlchemy 模块创建完几个表时,如果在实际生产环境中,需要对表结构进行更改,应该怎么办呢?总不能把表删除了吧,这样数据就会丢失了. 更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应用到数据库中. 在Flask中可以使用Flask-Migrate扩展,来实现数据迁移.并且集成到Flask-Script中,所有操作通过命令就能完成. 操作示例: 1.首先需要安装 flask-migrate 模块,当然还有 flask-script 模块. pip3

  • flask框架使用orm连接数据库的方法示例

    本文实例讲述了flask框架使用orm连接数据库的方法.分享给大家供大家参考,具体如下: 注:使用前请安装flask_sqlalchemy包,由于python-mysql不适用于python3.6,所以我们使用pymysql进行替代 1. flask的app文件中输入以下代码 (文件名为:learn_flask_mysql_orm.py) from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__n

  • Python使用Flask-SQLAlchemy连接数据库操作示例

    本文实例讲述了Python使用Flask-SQLAlchemy连接数据库操作.分享给大家供大家参考,具体如下: 需要安装flask pip install flask 安装Mysql-Python (这个是py的mysql驱动,这个在官方没有win的支持,只有第三方才有py2.7的whl) pip install MySQL_python-1.2.5-cp27-none-win_amd64.whl 注:上述whl文件也可点击此处链接下载到本地安装:https://www.lfd.uci.edu/

  • Python flask框架实现查询数据库并显示数据

    首先数据库长这样 我们想将name和age列显示到web页面 上代码sqlshowweb.py from flask import Flask from flask import render_template import pymysql app = Flask(__name__) @app.route('/') def index(): conn = pymysql.connect(host='39.106.168.84', user='flask_topvj_net', password=

  • flask框架配置mysql数据库操作详解

    本文实例讲述了flask框架配置mysql数据库操作.分享给大家供大家参考,具体如下: 该篇博客配置环境为:python版本3.5,flask2.0,python3中已经不再支持MySQLdb模块,所有这里我用了pymysql,所有使用前应该 安装pymysql: pip install pymysql 在网上的好多资料都给的是使用sqlite的例子,由于很不喜欢所以今天分享一下flask-sqlalchemy操作mysql的方法. 以前习惯使用sqlalchemy,后来发现使用flask-sq

随机推荐