Python-ORM实战
Date: 2019-06-03
Author: Sun
什么是ORM?
ORM(object relational mapping), 就是对象关系映射,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的,为了保证一致的使用习惯,通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了,而不用直接使用sql语言。
ORM作用: 对象模型(类) 《====》 关系模型 进行关联
用户只需要操作类就可以实现操作数据库
ORM 相当于把数据库也实例化,在代码操作mysql中级又加了orm这一层。
ORM 的优点:
- 隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句。快速开发,由此而来。
- 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相关技术,实现一个学生班级信息管理模块
模型说明:
学生(学生姓名, 学生性别,年龄,所属班级)
班级(班级名称)
一个班级有多个学生,班级id是学生表中的外键
功能说明:
(1)实现数据模型定义,同步到数据库DB
(2)班级和学生信息的添加功能(提供外部传参函数就行,下面雷同)
(3) 班级和学生信息的更新和删除功能
Python-ORM实战的更多相关文章
- 【图文详解】python爬虫实战——5分钟做个图片自动下载器
python爬虫实战——图片自动下载器 之前介绍了那么多基本知识[Python爬虫]入门知识,(没看的先去看!!)大家也估计手痒了.想要实际做个小东西来看看,毕竟: talk is cheap sho ...
- Python开发实战教程(8)-向网页提交获取数据
来这里找志同道合的小伙伴!↑↑↑ Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知 ...
- Python爬虫实战(4):豆瓣小组话题数据采集—动态网页
1, 引言 注释:上一篇<Python爬虫实战(3):安居客房产经纪人信息采集>,访问的网页是静态网页,有朋友模仿那个实战来采集动态加载豆瓣小组的网页,结果不成功.本篇是针对动态网页的数据 ...
- Python爬虫实战(2):爬取京东商品列表
1,引言 在上一篇<Python爬虫实战:爬取Drupal论坛帖子列表>,爬取了一个用Drupal做的论坛,是静态页面,抓取比较容易,即使直接解析html源文件都可以抓取到需要的内容.相反 ...
- Spring MVC 程序首页的设置 - 一号门-程序员的工作,程序员的生活(java,python,delphi实战)
body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...
- python机器学习实战(一)
python机器学习实战(一) 版权声明:本文为博主原创文章,转载请指明转载地址 www.cnblogs.com/fydeblog/p/7140974.html 前言 这篇notebook是关于机器 ...
- python机器学习实战(二)
python机器学习实战(二) 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7159775.html 前言 这篇noteboo ...
- python机器学习实战(三)
python机器学习实战(三) 版权声明:本文为博主原创文章,转载请指明转载地址 www.cnblogs.com/fydeblog/p/7277205.html 前言 这篇notebook是关于机器 ...
- python机器学习实战(四)
python机器学习实战(三) 版权声明:本文为博主原创文章,转载请指明转载地址 www.cnblogs.com/fydeblog/p/7364317.html 前言 这篇notebook是关于机器学 ...
- selenium2 python自动化测试实战(回归测试)
selenium2 python自动化测试实战 最近接手商城的项目,针对后台测试,功能比较简单,但是流程比较繁多,涉及到前后台的交叉测试.在对整个项目进行第一轮测试完成之后,考虑以后回归测试任务比较重 ...
随机推荐
- Python 3.8 新特性来袭
Python 3.8 新特性来袭 Python 3.8是Python语言的最新版本,它适合用于编写脚本.自动化以及机器学习和Web开发等各种任务.现在Python 3.8已经进入官方的beta阶段,这 ...
- codeforces 789 B. Masha and geometric
链接 B. Masha and geometric depression 题意 给你一个等比数列的首项和公比q,然后给出一个上限l,m个数字,在这个等比数列里,小于l且没有在m个数字里面出现过的可以写 ...
- oracle 删除表空间及数据文件方法
oracle 11g版本,创建数据库表空间,默认单个数据文件最大为32G,如果数据文件大于32G,可以增加数据文件. --删除空的表空间,但是不包含物理文件 drop tablespace table ...
- nginx (待更新)
install apt install nginx 默认在 /etc/nginx 目录下 一个 master 以及多个 worker 3504 root 20 0 141M 7196 5552 S 0 ...
- [SHOI2012]信用卡凸包(凸包+直觉)
这个题还是比较有趣. 小心发现,大胆猜想,不用证明! 我们发现所谓的信用卡凸包上弧的长度总和就是圆的周长! 然后再加上每个长宽都减去圆的直径之后的长方形的凸包周长即可! #include<ios ...
- 洛谷—— P3119 [USACO15JAN]草鉴定Grass Cownoisseur || BZOJ——T 3887: [Usaco2015 Jan]Grass Cownoisseur
http://www.lydsy.com/JudgeOnline/problem.php?id=3887|| https://www.luogu.org/problem/show?pid=3119 D ...
- SVN中各种符号箭头含义
黄色感叹号(有冲突): -- 这是有冲突了,冲突就是说你对某个文件进行了修改,别人也对这个文件进行了修改,别人抢在你提交之前先提交了,这时你再提交就会被提示发生冲突,而不允许 你提交,防止你的提交覆盖 ...
- java-类生命周期(二)
上文介绍了java-类生命周期(一),理论性比較强.认为太复杂的同学,瞟一下本文的样例加深理解. 先给道题目,看看答对没. /** * 类载入试验基类 * * @author peter_wang * ...
- Unity3D脚本编程--基本概念
1. 简单介绍 在Unity3D中,游戏对象(GameObject)的行为是由附加其上的脚本来控制的,游戏开发人员通过编写脚本来控制游戏中的全部对象,如移动Camera等. GameObject能够被 ...
- bzj1106: [POI2007]立方体大作战tet
比较玄幻的题目. 考虑两个不同的元素 假设位置是 a...a...b...b... 那么不需要通过交换ab来消除ab,各自弄就行 若是 a...b...b...a... 那也没必要交换,先把b消掉就好 ...