一、什么是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)外鍵關聯
多外鍵關聯:
多對多模式例子: