title: Flask SQLAlchemy 数据库
copyright: true
top: 0
date: 2018-07-24 13:27:03
tags: [Flask 数据库,sqlalchemy,数据库映射]
categories: Flask
permalink:
password:
keywords: [Flask 数据库,sqlalchemy,数据库映射]
description: Flask使用数据库模型,处理映射关系,定义基础的模型类。使用不同的连接数据库的方式创建与连接数据库。
看着一双美丽的眼睛流动着对那个时代的向往,不由得让人也期待啊。
创建数据库方式
- Database First # 使用navicat图形化管理工具一步一步创建
- Moedl First # 使用navicat的画图工具画出结构,然后自动生成
- Code First # 用Python写好数据库的模型,不用专门写SQL语句,主要解决创建数据的问题,专注于业务模型的设计。
模型创建与映射
模型概念
关于MVC方式,个人这么理解:
M --> model模块,主要的核心函数处理模块,负责处理大部分的业务的业务模型
V --> view模块,视图模块,负责展现出好看的界面
c --> ctrol模块,操作控制模块,负责处理控制部分
ORM:对象关系映射,包括数据创建过程,数据查询过程,删除,更新的过程。ORM操作数据库模型
来间接的操作数据库。
后期的所有数据库操作都是通过ORM来操作的。
创建妹子图项目模型
首先在数据库中创建好数据库,数据库名字为meizi,字符集为utf8mb4 – UTF-8 Unicode,排序规则为utf8mb4_general_ci
还是使用之前的妹子图的小项目,先创建目录data,然后新建creata_database.py,准备创建数据库结构,需要的数据结构大致如下
class data():
id = None
# id号
title = ''
# 页面标题
url = ''
# 该页面的主网址
show_img = ''
# 页面的单张展示图片
all_img = ''
# 页面的所有图片
def sample(self):
pass
然后使用sqlalchemy把结构直接映射到数据库,非常方便。这里提起一下,sqlalchemy不是flask自带的,但是falsk对sqlalchemy做了部分的优化,使用pipenv install flask-sqlalchemy即可安装。
ok,下面的新建的数据库模型
# -*- coding: utf-8 -*-
# @Time : 2018/7/24 0024 13:40
# @Author : Langzi
# @Blog : www.langzi.fun
# @File : creata_database.py
# @Software: PyCharm
import sys
from sqlalchemy import Column,Integer,String
# 导入column(字段),Integer(数字类型)
reload(sys)
sys.setdefaultencoding('utf-8')
class data():
id = Column(Integer,primary_key=True,autoincrement=True)
# 设置id号为数据库的主键,并且自增长
# 相当于SQL:id int primary key auto_increment
title = Column(String(100),nullable=True,default='获取该妹子信息失败')
# 页面标题长度为100,并且允许为空,如果为空的话就生成上面的default
url = Column(String(100),nullable=False,unique=True)
# 该页面的主网址长度100,不允许为空,不允许重复
show_img = Column(String(100),nullable=False)
# 页面的单张展示图片
all_img = Column(String(100),nullable=False)
# 页面的所有图片
def sample(self):
pass
妹子图项目映射到数据库
然后实例化sql的对象,新增代码:
from flask_sqlalchemy import SQLAlchemy
# 实例化sqlalchemy对象,在flask中导入进来
db = SQLAlchemy()
# db就是sqlalchemy的初始化的核心对象
class data(db.Model):
id= xxx重复上面的代码
把之前的类继承db即可。然后回到主目录下的init.py文件下,该文件之前是把蓝图注册到app里面的,之前的init.py代码如下
# -*- coding: utf-8 -*-
# @Time : 2018/7/19 0019 18:36
# @Author : Langzi
# @Blog : www.langzi.fun
# @File : __init__.py.py
# @Software: PyCharm
import sys
from flask import Flask
from app.web.data.creata_database import db
reload(sys)
sys.setdefaultencoding('utf-8')
def create_app():
app = Flask(__name__,template_folder=('web/templates'))
app.config.from_object('config')
start_Blueprint(app)
return app
def start_Blueprint(app):
from app.web.Mmzi import web
app.register_blueprint(web)
导入data目录下create_database.py中的db对象,然后注册到app当中并且初始化对象,并且调用他。
# -*- coding: utf-8 -*-
# @Time : 2018/7/19 0019 18:36
# @Author : Langzi
# @Blog : www.langzi.fun
# @File : __init__.py.py
# @Software: PyCharm
import sys
from flask import Flask
#from app.web.data.creata_database import db
reload(sys)
sys.setdefaultencoding('utf-8')
def create_app():