ORM->SQLAlchemy框架的学习
ORM英文名叫做Object Relational Mapping,即关系对象映射。主要是将数据库的表抽象成一个对象,将数据库和对象作映射;表中的每个字段都对应成该对象的属性,说到底就是ORM将编程的对象模型和数据库的关系模型建立映射关系。直接对对像模型进行操作,而不再需要繁琐的SQl语言。
而ORM的框架有很多,今天我们只来学SQLAlchemy框架这个框架。该框架主要是建立在数据库的API之上,利用关系对象的映射从而进行数据库的操作(对象转换成SQL,数据API执行SQL获取执行结果),如下图:
SQLALchemy 框架的基础操作
1、与数据库的对应关系
类对应数据库的表
对像对应数据库中的字段
2、操作过程
2.1 创建连接引擎
此过程主要是与数据库建立连接
engine=create_eingine("mysql+pymysql://root:[email protected]:3306/test",encoding='utf-8',echo=True)
格式:mysql+pymysql://数据库用户名:数据库密码@主机IP:端口号/数据库名称
encoding配置参数指定了和和数据库之间交换的数据的编码方式
echo 参数为 True 时,会显示每条执行的 SQL 语句,生产环境下可关闭
2.2 连接会话
#导入模块
from sqlalchemy.orm import sessionmaker
#创建一个连接会话对象;
需要指定是和那个数据库引擎之间的会话
DBSession = sessionmaker(bind=engine)
# 接下来~就可以用过session会话进行数据库的数据操作了,实例化
session =DBSession()
session的作用相当于sql语句里面的游标
3、ORM操作对象
3.1.基础类
#引入模块
from sqlalchemy.ext.declarative import declarative_base
# 创建基础类
base = declarative_base()
通过基础类将我们即将要处理的数据表信息和python的类映射到这些表上,建立映射关系(但是还没完成映射,这只是一个开始)
3.2.数据类型创建
#引入需要的模块
from sqlalchemy import Column, String, Integer
# 创建用户类型
class User(base):# 定义和指定数据库表之间的关联
__tablename__='user'#表的结构
#定义表中的属性值,以下的属性就是代表数据库中的列
id=Column(String(20),primary_key=True)#用column定义映射的列
name=Column(String(20))
age=Column(String(64))
3.3.数据类型映射操作
base.metadata.create_all(engine)
通过类型对象的metadata可以实现和数据库之间的交互,当已经存在表的时候,这句话就不会再执行
3.4.数据对象处理
①增
#创建对象,实例化
new_user=User(name="王五",age="19")
session.add(new_user)
#提交
session.commit()
session.close()
批量添加
#批量添加
user_obj=[user(name="西谷",password='456'),
user(name="北谷",password='567'),
user(name='西北谷',password='678')]
session.add_all(user_obj)
session.commit()
②查
User_name=session.query(user).filter(User.id=='1').one()
print('name:',user_name.name)
session.close()
批量查询
query_user=session.query(user).all()
for each in query_user:
print(each.id)
print(each.name)
print(each.age)
③改
#先将数据查出来,然后再修改
change_user=session.query(user).filter(user.id=='1').update({user.name:"new北谷"})
session.commit()
session.close()
④删
delete_user=session.query(user).filter(user.name=='张三').delete()
session.commit()
session.close()
##批量添加 user_obj=[user(name="西谷",password='456'), user(name="北谷",password='567'), user(name='西北谷',password='678')] session.add_all(user_obj) session.commit()批量添加
user_obj=[user(name="西谷",password='456'),
user(name="北谷",password='567'),
user(name='西北谷',password='678')]
session.add_all(user_obj)
session.commit()
3ngine=creangine("mysql+pymysql://root:[email protected]:3306/test",encoding='utf-8',echo=True)
engine=create_engine("mysql+pymysql://root:[email protected]:3306/test",encoding='utf-8',echo=True)
engengine=create_engine("mysql+pymysql://root:[email protected]:3306/test",encoding='utf-8',echo=True)ineengine=create_engine("mysql+pymysql://root:[email protected]:3306/test",encoding='utf-8',echo=True)=create_engine("mysql+pymysql://root:[email protected]:3306/test",encoding='utf-8',echo=True)engine=create_engine("mysql+pymysql://root:[email protected]:3306/test",encoding='utf-8',echo=True)ngine=create_engine("mysql+pymysql://root:[email protected]:3306/test",encoding='utf-8',echo=True)