一.简介

1.什么是ORM

  1. 对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 这也同时暗示着额外的执行开销;而且,如果ORM作为一种中间件实现,则会有很多机会做优化,而这些在手写的持久层并不存在。 更重要的是用于控制转换的元数据需要提供和管理;同样,这些花费要比维护手写的方案要少;并且就算是遵守ODMG规范的对象数据库依然需要类级别的元数据。
  2. 对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射
  3. 通俗来讲:**ORM,**即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。
  4. 常见的ORM框架有:Hibernate、TopLink、Castor JDO、Apache OJB等。
  5. Java中ORM的原理: 先说ORM的实现原理,其实,要实现JavaBean的属性到数据库表的字段的映射,任何ORM框架不外乎是读某个配置文件把JavaBean的属 性和数据库表的字段自动关联起来,当从数据库Query时,自动把字段的值塞进JavaBean的对应属性里,当做INSERT或UPDATE时,自动把 JavaBean的属性值绑定到SQL语句中。
  6. SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型。

2.SQLAlchemy与数据库关系图

MySQL映射ipv4 sql数据库映射_MySQL映射ipv4

二.基本操作

1.安装sqlalchemy

1).需要一台已安装MySQL数据库的机器
2).安装模块:pip install sqlalchemy
3).查看版本信息:

In [2]: import sqlalchemy

In [3]: sqlalchemy.__version__
Out[3]: '1.1.13'

4).连接数据库
在sqlalchemy中,session用于创建程序与数据库之间的会话。所有对象的载入和保存都需要通过session

#1)创建数据库引擎(连接数据库的过程)
#echo=True显示翻译好的SQL语句
from sqlalchemy.orm import Session
engine=sqlalchemy.create_engine("mysql://root:redhat@localhost/blog",
                                    encoding='utf8', echo=True)
#2)建立缓存
from sqlalchemy.orm import Session,sessionmaker
session=sessionmaker(bind=engine)()
#3)创建数据库对象需要继承的基类,包含ORM映射中相关的类和表的信息
Base=declarative_base()

5). 创建映射(创建表)
一个映射对应一个python类,用来表示一个数据库表

class student_info(Base):
    __tablename__='student_info'
    id=Column(Integer,primary_key=True,autoincrement=True)
    name=Column(String(20)) #Column表示构建一列数据
    sex=Column(String(10))
if __name__ == '__main__':
    #根据设置的信息创建数据库表(创建类:创建数据库表的过程)
    Base.metadata.create_all(engine)

6).添加数据

#添加数据信息(实例化对象:添加一条数据/记录)
#insert into student_info(id,name,sex) values(%(id)s,%(name)s,%(sex)s)
stu1=student_info(id=2,name='westos1',sex='男')
stu2=student_info(id=3,name='westos3',sex='男')
stu3=student_info(id=4,name='westos4',sex='女')
添加stu对象,但是仍然没有提交到数据库
session.add_all([stu1,stu2,stu3])
#提交数据库
session.commit()

7).查询数据

#查询数据信息
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())
print(session.query(student_info).filter_by(name='westoscdceedw').first())

8).删除数据

#删除数据
stu1=session.query(student_info).filter_by(name='westos1').first()
print("before delete:",stu1)
session.delete(stu1)
session.commit()