Date: 2019-06-03

Author: Sun

什么是ORM?

​ ORM(object relational mapping), 就是对象关系映射,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的,为了保证一致的使用习惯,通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了,而不用直接使用sql语言。

ORM作用: 对象模型(类) 《====》 关系模型 进行关联

​ 用户只需要操作类就可以实现操作数据库

ORM 相当于把数据库也实例化,在代码操作mysql中级又加了orm这一层。

ORM 的优点:

  1. 隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句。快速开发,由此而来。
  2. ORM使我们构造固化数据结构变得简单易行。

sqlalchemy

在Python中,最有名的ORM框架是SQLAlchemy。用户包括openstack\Dropbox等知名公司或应用.

安装依赖库:

pip install pymysql

pip install sqlalchemy

SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。SQLAlchemy本身无法操作数据库,其必须以来pymsql等第三方插件,Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作:

相关连接语句如下:

MySQL - Python   (python2.7推荐)
mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname> pymysql (python3.5以上版本推荐使用)
mysql+pymysql://<username>:<password>@<host>:<port>/<dbname>[?<options>] MySQL - Connector
mysql + mysqlconnector: // < user >: < password > cx_Oracle (oracle数据连接)
oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]

ORM 案例分析

# -*- coding: utf-8 -*-
__author__ = 'sun'
__date__ = '2018/6/7 上午9:33' '''
采用sqlalchemy定义实体类,进行ORM操作
依赖库:
pip install sqlalchemy
pip install pymysql
'''
from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker from sqlalchemy import Column, Integer, String, ForeignKey '''
数据库连接拼接串语法:
mysql_conn_str = "mysql+pymysql://username:password@IP:PORT/database"
''' mysql_conn_str = "mysql+pymysql://django:123456@172.16.245.202:3306/toscrape"
engine = create_engine(mysql_conn_str) Base = declarative_base() class Book(Base):
__tablename__ = "toscrape_book"
id = Column(Integer, primary_key=True) #create id column, set it auto_increment.
book_title = Column(String(200))
image_url = Column(String(300))
book_url = Column(String(300))
book_rate = Column(String(50))
book_price = Column(String(15)) '''
初始化DB,进行模型 --> 数据库 同步
'''
def _create_db_table():
Base.metadata.create_all(engine) def create_session():
_create_db_table()
Session = sessionmaker(bind=engine)
session = Session()
#session = sessinmaker(bind=engine)()
return session '''
add record to session.
objs --> (1) [obj1, obj2] (2) obj
'''
def add_records(session, objs):
if isinstance(objs, list):
session.add_all(objs)
else:
session.add(objs)
session.commit() '''
查询数据模型中的db数据
'''
def query_records(session, Cls):
return session.query(Cls).all() if __name__ == "__main__":
session = create_session()
'''
records = query_records(session, Book)
for rec in records:
print("title: " + rec.book_title + ", image_url:" + rec.image_url)
''' book = Book(book_title='xxx', image_url='xxx', book_url='xxx', book_rate='2.0',
book_price='xxx')
add_records(session, book)

相关参考文档:

https://blog.csdn.net/fgf00/article/details/52949973

作业:

采用python ORM相关技术,实现一个学生班级信息管理模块

模型说明:

  1. 学生(学生姓名, 学生性别,年龄,所属班级)

  2. 班级(班级名称)

    一个班级有多个学生,班级id是学生表中的外键

    功能说明:

​ (1)实现数据模型定义,同步到数据库DB

​ (2)班级和学生信息的添加功能(提供外部传参函数就行,下面雷同)

​ (3) 班级和学生信息的更新和删除功能

最新文章

  1. PHP数组的常用函数
  2. CSS3-canvas绘制线性渐变
  3. 最万能的解决mysql数据库的各种问题的办法
  4. PHP--获取响应头(Response Header)方法
  5. MFC中添加用户自定义消息
  6. 处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表
  7. leetcode 152. Maximum Product Subarray --------- java
  8. [转]python yield
  9. Java中json工具对比分析
  10. HDU 5772 String problem
  11. cocos2dx截整屏、截部分屏
  12. lynx---CentOS终端访问IP
  13. SQL SERVER 表最小行的一个纠结问题
  14. Linux显示进程状态
  15. 奖品列表组件【仿swiper】
  16. [UE4]模拟物理
  17. gitlab+jenkins
  18. 学号 20175223 《Java程序设计》第1周学习总结
  19. RMQ问题(Sparse-Table算法)
  20. CSRF攻击和防护

热门文章

  1. js将timestamp对象与时间字符串之间的转换
  2. selenium的显示等待和隐式等待区别
  3. JavaScript进阶【五】利用JavaScript实现动画的基本思路
  4. 【模板】 非旋转treap
  5. [SCOI2010] 股票交易 (单调队列优化dp)
  6. [CodeForces]981C Useful Decomposition
  7. 《代码敲不队》第八次团队作业:Alpha冲刺 第二天
  8. TP框架 mysql子查询
  9. Myeclipse学习总结(5)——Myeclipse常用快捷键再学习
  10. UVA11827 Maximum GCD