Flask SQLAlchemy 数据库笔记

本文详细介绍了如何使用Flask-SQLAlchemy进行数据库操作,包括数据库模型的创建与映射,不同方式连接数据库(如Pymysql和SQLAlchemy),以及数据库的增删改查操作。文章还提供了具体的代码示例,涵盖了ORM操作、外键关联、数据过滤、排序、分组等功能。
摘要由CSDN通过智能技术生成

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使用数据库模型,处理映射关系,定义基础的模型类。使用不同的连接数据库的方式创建与连接数据库。

看着一双美丽的眼睛流动着对那个时代的向往,不由得让人也期待啊。

创建数据库方式

  1. Database First # 使用navicat图形化管理工具一步一步创建
  2. Moedl First # 使用navicat的画图工具画出结构,然后自动生成
  3. 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():
   
SQLAlchemy 是一个强大的 Python SQL 驱动程序和 ORM(Object-Relational Mapping)工具,它允许开发者使用面向对象的方式来操作数据库,而不必直接编写 SQL 语句。在 SQLAlchemy 中设计数据库模型(也称为数据映射或领域模型)通常包含以下几个关键步骤: 1. **定义基类和元类**:使用 `Base` 类作为所有模型的基类,元类 (`__tablename__`, `__table_args__`等) 提供表名、索引等元数据。 ```python from sqlalchemy import Column, Integer, String, MetaData, Table from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() ``` 2. **定义模型类**:为每个数据库表创建一个子类,每个类对应数据库中的一个表。使用 SQLAlchemy 的 `Column` 对象定义字段,如 `id`, `name`, `description` 等。 ```python class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) username = Column(String, unique=True) email = Column(String, nullable=False) ``` 3. **关系映射**:如果涉及多个表之间的关联,可以定义 `relationship()` 方法来表示一对多、一对一或多对多的关系。 ```python class Post(Base): __tablename__ = 'posts' id = Column(Integer, primary_key=True) user_id = Column(Integer, ForeignKey('users.id')) title = Column(String) user = relationship('User', backref='posts') ``` 4. **继承和表扩展**:可以利用继承来复用字段和方法,或者为已有表添加额外信息。 5. **保存和查询**:使用 ORM 方法,如 `session.add()`, `session.commit()`, 和 `session.query()` 来执行 CRUD 操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪子燕青啦啦啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值