【什麼是ORM】
ORM 全稱是(Object Relational Mapping)表示物件關係對映; 通俗理解可以理解為程式語言的虛擬資料庫;
【理解ORM】
使用者地址資訊資料庫表與物件的對映
【ORM的重要特性】
1.物件導向的程式設計思想,方便擴充
2. 少寫(幾乎不寫)sql,提升開發效率
3.支援多種型別的資料庫(常用的mysql,pg,oracle等等),方便切換
4.ORM技術已經相當成熟,能解決絕大部分問題
【ORM模型框架的選擇】
【SQLAlchemy ORM模型】
眾所周知,ORM框架模型可選擇的有很多,那麼我們這邊選擇了SQLAlchemy 模型框架
pip install SQLAlchemy 安裝sql alchemy; 也可以指定版本號pip install SQLAlchemy ==1.4.17
import sqlalcherm; sqlalchemy.__version__; 驗證是否安裝成功及版本號;
【SQL Alchemy的使用】
- 一.開始連線資料庫
- 二.宣告ORM模型基類
- 三.實現ORM模型類
- 四.同步資料庫表
【開始連線資料庫】
- 延遲連線(Lazy Connecting)——只有在真正運算元據庫的時候,才會連線資料庫
- 連線程式碼示例
from sqlalchemy import create_engine create_engine("mysql://root:@127.0.0.1:3306/school?charset=utf8,echo=True,future=True")
【create_engine引數解釋】
- url(預設第一個引數)——連線到哪種型別的資料庫,如:mysql;以哪種資料庫聯結器(驅動)來連線資料庫
- echo——是否輸出logging(日誌)資訊,會把日誌都列印出來
- future使用SQLAlchemy2.0 API風格
【SQLAlchemy配置】
當密碼中含有特殊字元時,怎麼處理?
話不多說,見下方程式碼
from urllib.parse import quote_plus 如果密碼裡有特殊字元時,這邊需要匯入一個類來處理 password_formatted= quote.plus("mima%&&&mima") 把處理後的密碼貼上到上方的sqlalchemy配置中,即可
【宣告ORM模型基類】
from sqlalchemy.orm import declarative_base 宣告這個基類 Base = declarative_base()
【實現ORM模型類】
如何實現? 我們需要寫1個類去繼承他
然後還需要設立1個屬性
from sqlalchemy import Column, Integer, String, DateTime class Student(Base): """學生資訊表""" __tablename__ = 'student' id = Column(Integer, name='id', primary_key=True) stu_no = Column(Integer, nullable=False, comment='學號') stu_name = Column(String(16), nullable=False, comment='姓名') created_at = Column(DateTime)
【同步資料庫表】
1.需要在同步之前保證 資料庫中有這個庫,如果沒有,則需要手動建立
2 建立表,刪除表
from orm_connect_example import Base ,engine # 建立表 Base.metadata.create_all(engine) #刪除表 Base.metadata.drop_all(engine)
【ORM對應的模型欄位型別】
【程式碼示例】
from sqlalchemy import create_engine from sqlalchemy.orm import declarative_base from sqlalchemy import Column, Integer, String, DateTime # 第一步,準備連線 engine = create_engine('mysql://root:@10.72.100.1:8081/test_database_1?charset=utf8',echo=True) # 第二步,宣告ORM模型的基類 Base = declarative_base() # 第三步,實現ORM模型類 class Student(Base): """學生資訊表""" __tablename__ = 'student' id = Column(Integer, name='id', primary_key=True) stu_no = Column(Integer, nullable=False, comment='學號') stu_name = Column(String(16), nullable=False, comment='姓名') created_at = Column(DateTime) #第四步 同步資料庫表 def create_table() """同步資料庫表""" # 新建表 Base.metadata.create_all(bind=engine) # 刪除表 Base.metadata.drop_all(bind=engine)