flask通过SqlAlchemy操作数据库-增删改查实例(4-进阶篇-转载)

我们都知道前后端交互需要用到数据库,那么选用什么样的数据库比较合适呢,下面就介绍一种ORM规范的数据库操作框架-SqlAlchemy

1.什么是ORM?
ORM全称 Object-Relational Mapping,见名知意,意思就是把关系数据库的表结构映射到对象上,这就是ORM框架,那么这种映射关系由谁来处理呢,那么python中使用最多的就是SqlAlchemy框架,通过SqlAlchemy就可以使我们建立这种映射关系

2.SqlAlchemy-ORM框架-建立映射关系

  • 下载SqlAlchemy: pip install sqlalchemy
  • 创建映射关系,当前目录结构如下

在这里插入图片描述

  • SqlAlchemyConf.py 文件内容如下
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/12/14 15:41
# @Author  : 宁宁小可爱
# @File    : SqlAlchemyConf.py
# @Software: PyCharm
from sqlalchemy import Column, String, INTEGER,create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
"""
    说明:
        @ 这里的create_engine进行的操作是创建数据库连接,填写参数格式如下: 
        @ '数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名'
        @ 这里使用了.format函数,这就是个占位符,在format中按顺序填写就好,也可以指定编号比如{1}
"""
DATABASENAME = 'flask'
IPADDRESS = 'localhost'
engine = create_engine("mysql+mysqlconnector://root:root@{}:3306/{}".format(IPADDRESS, DATABASENAME))

"""
    说明:
        @ 这里的sessionmaker是一个工厂类,按照我们创建的engine绑定了数据库引擎
        @ 当我们使用这个Session的时候都会创建一个绑定引擎的Session,通过Session操作数据库
"""
DBSession = sessionmaker(bind=engine)

# 创建一个父类数据库
Base = declarative_base()

"""
    说明:
        @ 以下代码会创建flask数据库中user表的映射关系
        通过继承父类,指定字段类型表名将会建立映射关系
        
"""

class User(Base):
    __tablename__ = 'user'  # 指定表名字为 user
    # 主键id, 自增, Integer类型
    id = Column(INTEGER, primary_key=True, autoincrement=True)
    # userName字段 varchar类型 限制45 不为空
    userName = Column(String(45), nullable=False)
    # passWord字段, varchar类型 限制45 不为空
    passWord = Column(String(45), nullable=False)


  • 数据库表如下所示,必须与上面的 user相对应,不然构建不了映射关系,下图展示的是数据库的表属性,使用可视化软件为WorkBenck

在这里插入图片描述

3.使用SqlAlchemy添加+批量添加数据

  • SqlAlchemyDemo文件内容如下
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/12/14 16:57
# @Author  : 宁宁小可爱
# @File    : SqlAlchemyDemo.py
# @Software: PyCharm
from SqlAlchemyConf import DBSession, User

# 实例化session对象
session = DBSession()
"""
    说明:
        @ 这里从SqlAlchemy'文件中引入 DBSession ,目的是方便调用
        @ 引入User对象,映射 flask数据库中的 user表
	说明:
		@ 单个对象添加到数据库中
		@ 这里User为配置文件中的User对象,id主键自增所以不用添加
		@ add为添加单个对象调用语法 增删改后一定要调用commit提交,不然数据不会提交到数据库
"""
def add():
    user = User(userName='jack', passWord='123456')
    session.add(user)
    session.commit()
    session.close()
"""
    说明: 
        @ 批量添加数据使用 session.add_all()方法,把对象统一存储到数组中
        @ 把数组当做参数给方法即可
"""
def add_all():
    userList = []
    for i in range(10):
        user = User(userName='jack{}'.format(i), passWord='123456')
        userList.append(user)

    session.add_all(userList)
    session.commit()
    session.close()
if __name__ == '__main__':
    add_all()


  • 执行完毕后结果如下图所示

在这里插入图片描述
4.SqlAlchemy查找数据

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/12/14 16:57
# @Author  : 宁宁小可爱
# @File    : SqlAlchemyDemo.py
# @Software: PyCharm
from SqlAlchemyConf import DBSession, User


# 实例化session对象
session = DBSession()
"""
    说明:
        @ query(User).all() 函数中, query()的参数是你要查找的表的映射对象,也就是SqlAlchemyConf文件下的 class User对象
        @ all的意思就是全部,所以第一个函数是查询所有
        
        @ query(User).count()   查询记录条数总数
        @ query(User).filter_by(userName='jack6').first() : 查询用户名为 jack6的第一个用户 返回单个对象 如果写all返回的是list
        
        @ query(User).slice(0, 3): 查询三条数据,slice应用在分页查询中
        @ 分页的使用参考我这篇文章 :https://blog.csdn.net/weixin_44232093/article/details/100017742
"""
def query_user():
    user__all = session.query(User).all()
    for user in user__all:
        print("用户名: {}      密码: {}".format(user.userName, user.passWord))

    count = session.query(User).count()
    print("总记录条数为: {}".format(count))

    first_name_eq_jack = session.query(User).filter_by(userName='jack6').first()
    print("查询用户名为 jack的用户的id为: {}".format(first_name_eq_jack.id))

    user__slice = session.query(User).slice(0, 3)
    for slice in user__slice:
        print("分页查询三条的结果为: id为; {}     用户名为: {}".format(slice.id, slice.userName))



if __name__ == '__main__':
    query_user()

在这里插入图片描述

5.SqlAlchemy修改

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/12/14 16:57
# @Author  : 宁宁小可爱
# @File    : SqlAlchemyDemo.py
# @Software: PyCharm
from SqlAlchemyConf import DBSession, User


# 实例化session对象
session = DBSession()
"""
    说明:
        @ 这里查询使用了第二种方式,使用对象点属性方式,用filter 那么filter和filter_by有什么区别呢
        @ 语法区别: filter比较用一个等于号 ,filter_by用两个等号比较, 
                    filter比较时使用对象.属性方式, filter_by比较时直接使用属性名
        @ 用法区别: filter进行多条件查询时需要使用and ,filter_by直接 ,分割即可
        
        @ 要修改必须要先查找出要修改的对象,用什么查询都行,然后直接重新赋值commit即可
        
"""
def update():
    user = session.query(User).filter(User.id == 8).first()
    user.userName = 'update'
    user.passWord = '123321'

    session.add(user)
    session.commit()
    session.close()

if __name__ == '__main__':
    update()

  • 结果如下

在这里插入图片描述
6.SqlAlchemy删除

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/12/14 16:57
# @Author  : 宁宁小可爱
# @File    : SqlAlchemyDemo.py
# @Software: PyCharm
from SqlAlchemyConf import DBSession, User


# 实例化session对象
session = DBSession()
"""
    说明:
        @ 要删除对象也是需要先把对象查找出来,执行commit提交即可
        
"""
def delete(id):
    user = session.query(User).filter(User.id == id).first()

    session.delete(user)
    session.commit()
    session.close()


if __name__ == '__main__':
    delete(8)

  • 结果如下,可以看到刚才修改的记录已经被删除了

在这里插入图片描述
到此SqlAlchemy的增删改查操作就结束了,更多教程点击下列链接查看flask学习目录

转载自:https://blog.csdn.net/weixin_44232093/article/details/103539696

猜你喜欢

转载自blog.csdn.net/qq_47122804/article/details/121408677