Flask作为一款MVC的框架,提供ORM的功能。学习模型之前,我们首先要明白下面三个问题。
1-什么是ORM?
中文为“对象关系映射”,通过ORM可以通过类的方式操作数据库,而不用再写原生的SQL语句,通过表映射成类,把行作为示例,把字段作为属性;ORM在进行对象操作的时候最终还会把对应的操作转换成原生的SQL语句。
2-为什么使用ORM?
随着项目的越来越大,采用原生SQL的方式,在代码中会出现大量的SQL,那么会出现如下问题:
3-ORM有哪些好处?
import os
from flask import Flask
from flask_script import Manager
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 配置数据库连接
app.config['SQLAlCHEMY_DATABASE_URI']='mysql+pymysql://root:[email protected]:3306/demo07'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False
1、常见字段类型
类型名称 |
Python类型 |
说明 |
Integer |
Int |
存储整型 |
Smallintege |
Int |
小整型 |
Biginteger |
Int |
长整型 |
Float |
Float |
浮点型 |
String |
Str |
字符串(不定长varchar) |
Text |
Str |
大型文本 |
Bollean |
Bool |
布尔类型 |
Date |
Datatime.date |
日期 |
Time |
Datatime.time |
时间 |
Datatime |
Datatime.datatime |
日期和时间 |
2、可约束条件
选项 |
说明 |
Primary_key |
是否设置主键,默认为False |
Unique |
是否设置唯一索引,默认为false |
Index |
是否设置常规索引,默认为false |
Nullable |
是否可以为空,默认为True |
default |
设置默认值 |
3、注意事项
1、创建模型类
eg:user类
# 创建模型类
class User(db.Model, DB_Base):
__tablename__ = 'user' # 起表名,不起默认为类名
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(10), default='guofubin', index=True)
age = db.Column(db.Integer, default=18)
sex = db.Column(db.Boolean, default=True)
info = db.Column(db.String(50), default='个人简介')
def __str__(self):
return 'username:{}'.format(self.username)
2、创建数据表
# 创建表
@app.route('/create/')
def create():
db.create_all()
return '创建表'
3、删除数据表
# 删除表
@app.route('/drop/')
def drop():
db.drop_all()
return '删除表'
1、添加数据
添加一条数据
# 添加一条数据
@app.route('/insert_one/')
def insert_one():
"""方法一:
try:
data=User()
data.username='lucky'
data.age=25
data.sex=False
data.info='我就是我,就是这么强'
db.session.add(data)
db.session.commit()
except:
db.session.rollback()
# 方法二
try:
data=User(username='lucky')
db.session.add(data)
db.session.commit()
except:
db.session.rollback()
"""
return '添加一天数据'
添加多条数据
# 插入多条数据
@app.route('/insert_many/')
def insert_many():
try:
u1 = User(username='张三', sex=True, age=20)
u2 = User(username='李四', sex=False, age=30)
db.session.add_all([u1, u2])
db.session.commit()
except:
db.session.rollback()
return '添加多条数据'
2、删除数据
# 数据的删除
@app.route('/delete/')
def delete():
u = User.query.get(4)
db.session.delete(u)
db.session.commit()
return '删除'
3、修改数据
# 数据的修改
@app.route('/update/')
def update():
try:
u = User.query.get(1)
u.age = 2
db.session.add(u)
db.session.commit()
except:
db.session.rollback()
return '修改数据'
4、查询数据
# 查询数据
@app.route('/select/')
def select():
u = User.query.get(1) # 通过主键key进行筛选
print(u)
print(u.age)
return '查询数据'
1、封装模型基类
# 自定义封装模型基类
class DB_Base:
# 添加一条数据,对象方法
def save(self):
try:
db.session.add(self)
db.session.commit()
except:
db.session.rollback()
# 添加多条数据,静态方法
@staticmethod
def save_all(*args):
try:
db.session.add_all(args)
db.session.commit()
except:
db.session.rollback()
# 删除数据
def delete(self):
try:
db.session.delete(self)
db.session.commit()
return True
except:
db.session.rollback()
return False
2、模型类继承基类
# 创建模型类
class User(db.Model, DB_Base):
__tablename__ = 'user' # 起表名,不起默认为类名
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(10), default='guofubin', index=True)
age = db.Column(db.Integer, default=18)
sex = db.Column(db.Boolean, default=True)
info = db.Column(db.String(50), default='个人简介')
def __str__(self):
return 'username:{}'.format(self.username)
3、操作模型
通过SQLAlchemy操作模型,进而操作数据库
# 添加一条数据
@app.route('/insert_one/')
def insert_one():
u = User(username='lucky')
u.save()
return '添加一天数据'
# 插入多条数据
@app.route('/insert_many/')
def insert_many():
try:
u1 = User(username='张三', sex=True, age=20)
u2 = User(username='李四', sex=False, age=30)
User.save_all(u1,u2)
except:
db.session.rollback()
return '添加多条数据'
# 查询数据
@app.route('/select/')
def select():
u = User.query.get(1) # 通过主键key进行筛选
print(u)
print(u.age)
return '查询数据'
# 数据的修改
@app.route('/update/')
def update():
try:
u = User.query.get(1)
u.age = 2
u.save()
except:
db.session.rollback()
return '修改数据'
# 数据的删除
@app.route('/delete/')
def delete():
u = User.query.get(4)
u.delete()
return '删除'