欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据库—17对象关系映射sqlalchemy

程序员文章站 2022-04-06 21:01:14
...

一、简介

ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和 业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再 去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。
简单地说,就是把面向对象的语言翻译成SQL语句并执行。

SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射 (ORM)工具,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型。

SQLAlchemy与数据库关系图:
数据库—17对象关系映射sqlalchemy

二、基本操作

1、安装sqlalchemy

pip3 install sqlalchemy

2、连接数据库:

(1)创建数据库引擎:
engine = sqlalchemy.create_engine(“mysql://用户名:密码@主机名/数据库名”, encoding = ‘utf8’, echo = True)

(2)建立缓存:
session = sessionmaker(bind = engine)()

(3)创建基类:包含ORM映射中相关的类和表的信息
Base = declarative_base()

3、创建映射

(1)定义类,实际就是创建表
一个类就是一个数据库表
(2)实例化对象
(3)添加数据:
session.add_all()
(4)提交信息到数据库:
session.commit()

4、查找数据

在sqlalchemy模块中,查找数据给提供了query()的方法:
session.query(类名).all #查询全部数据
session.query(类名).first # 查询一条
筛选查询:
session.query(类名).filter_by(条件).all()
sessoin.query(类名).filter_by(条件).first()
session.query(类名).filter_by(条件).one_or_none #如果有,返回一个,没有返回none

查询时,是先转为SQL语句,经过查询完后,转换成面向对象语言,返回的是对象

5、删除数据

session.delete()

import sqlalchemy
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import Session
import pymysql
pymysql.install_as_MySQLdb()
from sqlalchemy.orm import sessionmaker

#创建数据库引擎
#使用create_engine建立同数据库的链接,返回的是一个engine实例
#echo=True 表示可以在控制台看到操作涉及的SQL语句
engine = sqlalchemy.create_engine("mysql://用户名:密码@主机名/数据库名",
                                   encoding = 'utf8', echo = True)
#建立缓存
session = sessionmaker(bind = engine)()

#创建数据库对象需要继承的基类,
Base = declarative_base()

# 创建类,实际就是创建数据库表
class student_info(Base):
    __tablename__ = 'student_info'
    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(20))
    sex = Column(String(10))
    # 可视化
    def __repr__(self):
        return "<student_info(name='%s')>" % self.name

if __name__ == '__main__':
    #检查表的存在性,如果不存在的话会执行表的创建工作
    Base.metadata.create_all(engine)

    #添加数据信息:实例化
    stu1 = student_info(id = 1, name = 'westos1', sex = '男')
    stu2 = student_info(id = 2, name = 'westos2', sex = '女')
    stu3 = student_info(id = 3, name = 'westos3', sex = '女')
    
    #添加数据信息,并提交到数据库中
    session.add_all([stu1,stu2,stu3])
    session.commit()

    #查询数据信息 query
    print(session.query(student_info).all())

    #根据筛选条件查询信息
    print(session.query(student_info).filter_by(name='westos1').all())
    print(session.query(student_info).filter_by(name='westos1').first())

    #删除数据
    stu1 = session.query(student_info).filter_by(name = 'westos2').first()
    print("删除之前:" ,stu1)
    session.delete(stu1)
    session.commit()
    stu2 = session.query(student_info).filter_by(name = 'westos2').first()
    print("删除后: ", stu2)