目录:
- 1.1 ORM介绍(作用:不用原生SQL语句对数据库操作)
- 1.2 安装sqlalchemy并创建表
- 1.3 使用sqlalchemy对表基本操作
- 1.4 一对多外键关联
- 1.5 sqlalchemy多对多关联
1.1 ORM介绍(作用:不用原生SQL语句对数据库操作) 返回顶部
1、什么是orm(orm是一种术语而不是软件)
1)orm英文全称object relational mapping,就是对象映射关系程序
2)简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的
3)为了保证一致的使用习惯,通过orm将编程语言的对象模型和数据库的关系模型建立映射关系
4)这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了,
而不用直接使用sql语言
2、ORM作用
1)隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单
易行,并且完全不用考虑该死的SQL语句。快速开发,由此而来
2)ORM使我们构造固化数据结构变得简单易行。
3、ORM缺点
1)无可避免的,自动化意味着映射和关联管理,代价是牺牲性能
2)现在的各种ORM框架都在尝试使用各种方法来减轻这块(LazyLoad,Cache),效果还是很显著的。
1.2 安装sqlalchemy并创建表 返回顶部
1、在win10中直接用pip3安装即可
pip3 install sqlalchemy
2、sqlalchemy可以支持多种数据库的连接使用:下面是常用的几种
MySQL-Python
mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>
pymysql
mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]
MySQL-Connector
mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>
cx_Oracle
oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]
更多详见: http://docs.sqlalchemy.org/en/latest/dialects/index.html
3、sqlalchemy说明
1) sqlalchemy的底层还是对mysqldb, pymysql的封装
2) 我们不用写原生SQL了,但是sqlalchemy执行的时候还是要用原生SQL
3) Sqlalchemy就是通过使用mysqldb, pymysql等来执行原生SQL语句
4、创建表
1. 使用原生sql创建表
CREATE TABLE user (
id INTEGER NOT NULL AUTO_INCREMENT,
name VARCHAR(32),
password VARCHAR(64),
PRIMARY KEY (id)
)
2. 使用sqlalchemy创建表的两种方法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
#! -*- coding:utf8 -*- import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker '''第一步:连接数据库''' engine = create_engine("mysql+pymysql://root:1@127.0.0.1/bsp?charset=utf8") # engine = create_engine("mysql+pymysql://root:1@127.0.0.1/tomdb",encoding='utf-8', echo=True) '''附加: 无论是增删改查都要先创建与数据库的会话session class''' #创建与数据库的会话session class ,注意,这里返回给session的是个class类,不是实例 Session_class = sessionmaker(bind=engine) #创建用于数据库session的类 session = Session_class() #这里才是生成session实例可以理解为cursor '''第二步:操作数据库''' #1、查看mysql中有哪些数据库 dbs=session.execute('show databases;').fetchall() #2、切换当前数据库 session.execute('use bsp;') #3、查询时过滤出第一条 row1=session.execute('select * from relations_department where Id>1;').first() fid_id = row1.fid_id #4、一对多关联查询: 根据上面查询的父部门id 可以找到父部门信息 row2=session.execute('select * from relations_department where Id=%s;'%fid_id).first() print row2.name # 政府事业部
1.3 使用sqlalchemy对表基本操作 返回顶部
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1.4 一对多外键关联 返回顶部
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1.5 sqlalchemy多对多关联 返回顶部
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1.6 sqlalchemy执行原生SQL语句
1、执行原生SQL语句
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
2、找到当前数据库中所有非空表
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)