一、什么是ORM框架
object relational mapping,也就是对象映射关系程序,主要作用是用面向对象的形式转换原生sql,避免直接写死sql语言在代码当中
优点:隐藏了数据访问细节,通用数据库交互,ORM的核心,使得交互更贱简单异性,适用多种数据库类型。
缺点:进行sql转换,意味着映射和关联管理,会影响性能,但是现在各种ORM矿化适用lazyload,cache等有效减轻这块,效果明显。
二、最有名的ORM框架:SQLalchemy
1、不同的数据库类型和模块
根据配置文件的不同调用不同的数据库API,实现对数据库的操作
2、sqlalchemy操作mysql表
(1)创建表
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String
#创建引擎
engine=create_engine("mysql+pymysql://root:thinker@localhost/testdb?charset=utf8",echo=True) #echo=True执行时显示对应的sql
#生成orm基类
Base=declarative_base()
#表类
class User(Base):
__tablename__=‘user‘ #表名
id=Column(Integer,primary_key=True)
name=Column(String(32),nullable=False)
password=Column(String(64))
def __repr__(self): #表现打印格式
return "<%s,%s>"%(self.name,self.password)
#创建表结构
Base.metadata.create_all(engine)
(2)创建数据
注:这里需要将(1)中的表结构和engine一起带上,会需要用到
from sqlalchemy.orm import sessionmaker
#创建会话连接
Session=sessionmaker(bind=engine) #创建与数据库的会话,返回的是类
session=Session() #类的实例化
user_obj=User(name=‘chen‘,password=‘123‘) #生成你要创建的对象
session.add(user_obj) #将要创建的数据对象添加到session中,一会commit统一创建
session.commit() #提交创建
(3)查询数据
user_obj=session.query(User).filter(User.name=="chen").all() #all取出所有
user_obj=session.query(User).filter(User.name=="chen").first() #取出第一个
print(user_obj) #返回列表
(4)修改数据
先查询出来,然后直接赋值
user_obj=session.query(User).filter(User.name=="chen").first()
user_obj.name=‘fortest‘
user_obj.password=‘fortest‘
session.commit()
(5)删除数据
先查询出来,然后直接删除
user_objs=session.query(User).filter(User.name=="chen").all()
for i in user_objs:
session.delete(i)
session.commit()
(6)分组与统计
统计:
user_objs=session.query(User).filter(User.name==‘chen‘).count()
print(user_objs)
分组:
group_by
(7)连接查询
(8)外键关联
多外键关联:
多对多模式例子: