这两天在学flask框架,今天学到ORM,进度比较快,新的内容太多了,笔记一下子多了好多,学完第二天就有点忘了。。记录一下今天学的吧,以后把前几天的学习内容补上,没事也可以来看看~
谈ORM之前,先介绍一下模型
1.什么是模型:
模型是根据数据库中表结构而创建的class
数据库中的每一张表对应到编程语言中就是一个class
表中的每一个列,就是class中的一个属性
2. 1ORM(ORM是一种模型的框架)
全称 object relational Mapping (对象关系映射)
ORM的三个特征
1.数据表(table)到class 的映射
2.数据类型的映射数据库中表的字段以及类型,对应到编程语言就是类的属性以及数据类型
3.关系映射将数据库中表与表的关系对应到编程语言中 类与类的关系
create table user(
id int primary key auto_increment,
user varchar(16) nou null,
age int not null
);
对应的映射:
class User(xxxx):
id = xxx
user = xxx
age = xxx
ORM的优点
1.封装了数据库中所有的操作,
提升效率允许通过模型类自动生成数据表
2.省略庞大的数据访问层,即便不适用sql编码也能完成数据库的
CEUD操作
C Create
R reteive
u update
d delete
Flask 中的ORM框架(SQLAlchemy框架)
1.SQLAlchemy框架
python 中的ORM框架
1.安装pip install sqlalchemy
2.Flask需要使用flask-sqlalchemy 支持包
pip3 install flask-sqlalchemy
学的时候碰到一个’‘新‘’知识:
create database flaskDB default charset utf8 collate utf8_general_ci;
以前创建数据库的时候没有用到collate utf8_general_ci 百度查了一下是不对大小写敏感的意思。sc是大小写敏感。
在Flask中配置数据库
from flask import Flask
app = Flask(__name__)
# 语法声明
#app.config['SQLALCHEMY_DATABASE_URI'] =
#"mysql://用户名称:数据库密码@数据库服务地址:端口号/数据库名"
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://root:12456@127.0.0.1:3306/flaskDB"
创建SQLALchemy的实例
from flask_sqlalchemy import SQLAlchemy
from flask import Flask
app = Flask(__name__)
<!-- import pymysql
pymysql.install_as_MySQLdb() --> # 这两句代码等同于 下面的mysql+pymysql
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://root:12456@127.0.0.1:3306/flaskDB"
db = SQLAlchemy(app)
#允许通过db做所有与数据库相关的操作
@app.route()
def idnex():
pass
if __name__ == "__main__":
xxxx
指定信号追踪,提升处理效率
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
4.定义模型类
模型:根据数据库表结构而创建出来的类(模型类,实体类)
1.语法
class MODELNAME(db.Model)
__tablename__ = "TABLENAME"
COLUMN_NAME = db.Column(db.TYPE,OPTIONS)
1.MODELNAME:定义模型类的名称,根据表名定
表名USERS
MODELNAME:User
2.TABLENAME:映射到数据库中表的名称
表名:USER
TABLENAME:USERS
MODELNAME:Users
3. COLUMN_NAME: 映射到数据库的列名
4.db.TYPE:映射到列的类型
db.TYPE常用列类型
Integer int 整数
Float float 浮点数
Numeric decimal.decimal 定点数
String str 字符串
Text str 字符串
Boolean bool 布尔型
Date datetime.date 日期类型
Time datetime.time 时间类型
DateTime datetime.datetime 日期时间类型
5.OPTIONS 指定列选项
选项名 说明
autoincrement True 该列自增长
注意:如果列的类型为int并且为主键 默认自增长
prmary_key 如果为TRUE 表示改列是主键
unique True 唯一
index 加索引
nullable true 可以为空
default 指定该列的默认值
举个例子:
class Users(db.Model):
__tablename__ = "users"
id = db.Column(db.Integer,
primary_key=True)
username = db.Column(db.String(80),
nullable=False, #不为空
unique=True, # 值唯一
index=True) #增加索引
age = db.Column(
db.Integer,
nullable=True
)
email = db.Column(db.String(120),
unique=True)
db.create_all()#作用:将所有的实体类生成对应的数据表
# 前提: 对应的表不存在的前提下才能生成
db.create_all(),和db.drop_all()是创建和删除,在实际应用中这么做会出现问题。他不能修改表的属性。所以要引进数据库的迁移
数据库的迁移
1.将实体类的改动再映射回数据库
依赖于第三方库
1.flask_script
包flask_script
类:Manager
作用:对项目进行管理,如启动项目,添加命令等
创建Mananer实例,指定要管理哪个APP
manager = Manager(app)
2.flask_migrate
包:flask_migrate
类:
1.Migrate
作用:用于管理app和db
创建Migrate对象,并指定要关联的APP,DB
migrate = Migrate(app,db)
2.MigrateCommand
作用:提供了数据迁移的指令
为manager增加数据迁移的子命令
manager.add_command('db',MigrateCommand)
app.run()改为 manager.run()
只能在终端中 python3 xxx.py runserver 运行 这样比较麻烦 不能直接点run运行所以还有一种方法可以方便运行
指定启动模式为调试模式
app.config['DEBUG'] = True
改完后还需要设置一些东西
在红线处加上这几句话 就可以每次点击run自动了
一个完整的基本框架代码
from flask import Flask,render_template,request
from flask_sqlalchemy import SQLAlchemy
from flask_script import Manager
from flask_migrate import Migrate,MigrateCommand
app = Flask(__name__)
# 指定数据库的配置信息,连接到flaskDB的数据库
app.config['SQLALCHEMY_DATABASE_URI'] =\
"mysql+pymysql://root:123456@127.0.0.1:3306/flaskDB"
# 指定信号追踪
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 创建SQLAlchemy的示例 - db ,用于做数据库的操作
db = SQLAlchemy(app)
app.config['DEBUG'] = True #启动模式修改为调试模式
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True #自动提交映射数据
# 创建Mananer实例,指定要管理哪个APP
manager = Manager(app)
# 创建Migrate对象,并指定要关联的APP,DB
migrate = Migrate(app,db)
# 为manager增加数据迁移的子命令
manager.add_command('db',MigrateCommand)
先写到这了。。。。太多了