博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python-ORM实战
阅读量:6431 次
发布时间:2019-06-23

本文共 3183 字,大约阅读时间需要 10 分钟。

Date: 2019-06-03

Author: Sun

什么是ORM?

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

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

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

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

ORM 的优点:

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

1466232-20190603234141463-2030338458.png

sqlalchemy

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

安装依赖库:

pip install pymysql

pip install sqlalchemy

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

相关连接语句如下:

MySQL - Python   (python2.7推荐) mysql+mysqldb://
:
@
[:
]/
pymysql (python3.5以上版本推荐使用)mysql+pymysql://
:
@
:
/
[?
]MySQL - Connectormysql + 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_enginefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy.orm import  sessionmakerfrom 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) 班级和学生信息的更新和删除功能

转载于:https://www.cnblogs.com/sunBinary/p/10970898.html

你可能感兴趣的文章
Centos6.5下安装protobuf及简单使用
查看>>
[SharePoint] SharePoint 错误集 3
查看>>
高压光耦
查看>>
[转]DPM2012系列之六:在Win7上安装DPM远程管理控制台
查看>>
postgres函数
查看>>
Microsoft AJAX Library Cheat Sheet(5): Number和Error类型的扩展
查看>>
AfxGetMainWnd函数
查看>>
WebView增加一个水平Progress,位置、长相随意
查看>>
easyui messager alert 三秒后自动关闭提示
查看>>
core data 基础操作
查看>>
ORM框架Hibernate (四) 一对一单向、双向关联映射
查看>>
20140616 科技脉搏 -最大颠覆来自创业公司与边缘产业
查看>>
offsetLeft, offsetTop以及postion().left , postion().top有神马区别
查看>>
数据库中触发器before与after认识
查看>>
手动露天广场和立方体
查看>>
随机选择
查看>>
【Java并发编程三】闭锁
查看>>
分布式事务中遇到的 “与基础事务管理器的通信失败”的解决方法
查看>>
让你的Git水平更上一层楼的10个小贴士
查看>>
c++ string 之 find_first_not_of 源码
查看>>