Flask扩展之 【Flask-SQLAlchemy】 关于在flask中通过ORM方式来操作数据库 01

Flask-SQLAlchemy 操作步骤【入门简易版】

在介绍Flask-SQLAlchemy之前,先说一下ORM的概念:
ORM:
ORM 全拼 【Object-Relation Mapping】.
中文意为 【对象-关系映射】.
主要实现模型对象关系数据库数据的映射.

也就是说,我们可以不需要直接写原生SQL语句,通过调用对象方法的方式,对数据库进行增删改查的操作;呐,ORM有下面的优点:

  1. 只需要面向对象编程, 不需要面向数据库编写代码. 对数据库的操作都转化成对类属性和方法的操作. 不用编写各种数据库的sql语句.
  2. 实现了数据模型与数据库的解耦, 屏蔽了不同数据库操作上的差异. 不在关注用的是mysql、oracle…等.
    通过简单的配置就可以轻松更换数据库, 而不需要修改代码.

嗯,在Flask中,我们可以使用Flask-SQLAlchemy这个框架,来完成这种对象关系映射的方式。

当然了,首先的需要在你的Flask中安装这个扩展:
1.安装相关的扩展:

安装代码:

pip install flask-sqlalchemy

我自己使用的是mysql数据库,所以这里还需要安装一个mysqldb

pip install flask-mysqldb

2.数据库的连接
既然我们现在是通过这个SQLAlchemy框架来完成数据库的相关操作,那么是不是应该遵循ORM理念,通过面向对象的方式干活呢,所以,我们需要用SQLAlchemy这个类来初始化一个对象;

初始化 SQLAlchemy 对象

db = SQLAlchemy(app)

但是哈,我们通过进入SQLAlchemy的源代码中会发现,在app默认为none的情况下,SQLAlchemy生成的对象db就会默认使用app相关的配置,然后呢,我们就需要在初始化对象之前,进行app的相关配置:
大概是下面几个:
Flask扩展之 【Flask-SQLAlchemy】 关于在flask中通过ORM方式来操作数据库 01

但是实际上,我目前需要配置的,如下:
初始化之前,需要进行app的相关配置:
1.是数据库的连接配置:

app.config[‘SQLALCHEMY_DATABASE_URI’] = '数据库类型://用户名:密码@数据库ip:数据库端口/数据库名称

比如:

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://xiaomin:[email protected]:8888/xiaominsql'

2.动态追踪修改设置,如未设置只会提示警告

你不配置这段代码的话,在运行的时候,就会提示警告,但是看着跟报错一样的一长串,为了避免审美受累,所以就配置一下,一劳永逸,何乐不为。

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

3.模型的创建:

模型对象到关系数据库数据的映射,也就说,我们可以直接创建一个表的模型,然后通过相关语句进行提交,SQLAlchemy底层会帮我们转换成原生sql语句进行表的创建,所以这里我们只需要针对不同的表,创建不同的模型即可:
比如,我现在创建一个:

class Role(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(64))

Column:列,就是数据库中所说的字段;
Interger,String:是用来声明字段的类型的;
常用字段类型参考:
Flask扩展之 【Flask-SQLAlchemy】 关于在flask中通过ORM方式来操作数据库 01

4.创建:

创建的话,这里可以通过create_all()就可以通过模型创建一个表了。

db.create_all()

当然,这个方式,只是在这里用来做小小的验证的,实际项目应用的话是不会这样使用的。

【入门简易代码】参考:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://xiaomin:[email protected]:8888/xiaominsql'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

db = SQLAlchemy(app)

@app.route('/')
def index():
    return 'hello world'


class Role(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(64))


if __name__ == '__main__':
    db.create_all()
    app.run()

当然了,实际上的操作还有增删改查等等一系列操作,在这里就不进行讲述了,等下次再写吧,这里只是简单的小入门哦。。