032_关系型数据库MySQL_ORM对象关系映射

1. 理解对象关系映射

对象关系映射(Object-Relational Mapping, ORM): 作用是在关系型数据库和业务实体对象之间作一个映射,这样,在具体的操作业务对象的时,不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。简单理解:是可以将 py 语言翻译为 sql 语言,将 sql 语言翻译为 py 语言的的过程
SQLAlchemy:是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型。

2. 利用sqlalchemy实现ORM

  1. 安装 sqlalchemy,在一台有安装有 mysql 数据库的机器上
pip install sqlalchemy
  1. 代码示例:
# object(oop) --> mysql(SQL)
import sqlalchemy
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import Session, sessionmaker
import pymysql
pymysql.install_as_MySQLdb()


# 1. 创建数据库引擎(连接数据库的过程)
#     echo=True, 显示翻译好的sql语句
engine = sqlalchemy.create_engine("mysql://root:redhat@localhost/StudentProject",
                                  encoding="utf8", echo=True)

# 2. 绑定并建立缓存
# session = Session()
mySession = sessionmaker(bind=engine)
session = mySession()

# 3. 建立数据库对象需要继承的基类
Base = declarative_base()

# 4. 自定义一个类,一个类就是一个数据库表,将其翻译成sql语句以生成一个数据库表
class Student(Base):
    # 数据库表的名称
    __tablename__ = 'stuinfo'
    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(20))
    gender = Column(String(20))

    def __repr__(self):
        return 'Student<%s>' % (self.name)

if __name__ == '__main__':
	# 5. 根据设置的信息创建数据库表-(创建类:创建数据库表的过程)
    Base.metadata.create_all(engine)

    # ***添加数据信息***:实例化对象添加一条信息
    stu1 = Student(id=3, name='xiaoming', gender='女')
    stu2 = Student(id=4, name='xiaogang', gender='男')
    stu3 = Student(id=5, name='xiaoming', gender='男')
    session.add(stu1)  # 添加一条数据
    session.add_all([stu2, stu3])  # 添加多条数据    
    session.commit()  # 对数据进行增、删、改操作后一定要进行事务提交

    # ***查询数据信息***
    print(session.query(Student).all())
    # 根据筛选条件查询信息
    print(session.query(Student).filter_by(name='xiaoming').first())
    print(session.query(Student).filter_by(name='xiaoming').all())
    print(session.query(Student).filter_by(name='xiaogangbalbala').first())

    # ***删除信息***
    del_stu = session.query(Student).filter_by(name='xiaohong').first()
    print('Before Delete: ', del_stu)
    session.delete(del_stu)
    session.commit()  # 对数据进行增、删、改操作后一定要进行事务提交
    del_stu = session.query(Student).filter_by(name='xiaohong').first()
    print('After Delete: ', del_stu)
032_关系型数据库MySQL_ORM对象关系映射032_关系型数据库MySQL_ORM对象关系映射 煮面要加牛奶 发布了37 篇原创文章 · 获赞 0 · 访问量 5286 私信 关注
上一篇:CVE-2016-3081 S2-032复现


下一篇:032:Java super关键字详解