https://www.cnblogs.com/llkingangle/p/7189622.html
https://www.cnblogs.com/caicairui/p/7821601.html
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0014021031294178f993c85204e4d1b81ab032070641ce5000
對象關係映射(Object Relational Mapping,簡稱ORM)模式是一種爲了解決面向對象與關係數據庫存在的互不匹配的現象的技術。簡單的說,ORM是通過使用描述對象和數據庫之間映射的元數據,將程序中的對象自動持久化到關係數據庫中。
幾乎所有的程序裏面,都存在對象和關係數據庫。在業務邏輯層和用戶界面層中,我們是面向對象的。當對象信息發生變化的時候,我們需要把對象的信息保存在關係數據庫中。
當開發一個應用程序的時候,如果不使用ORM,可能會寫不少數據訪問層(DAL)的代碼,用來從數據庫保存、刪除、讀取對象信息等等,而這些代碼寫起來總是重複的。
ORM解決的主要問題是對象關係的映射。域模型和關係模型分別是建立在概念模型的基礎上的。域模型是面向對象的,而關係模型是面向關係的。一般情況下,一個持久化類和一個表對應,類的每個實例對應表中的一條記錄,類的每個屬性對應表的每個字段。
ORM技術特點:
(1)提高了開發效率。由於ORM可以自動對Entity對象與數據庫中的Table進行字段與屬性的映射,所以我們實際可能已經不需要一個專用的、龐大的數據訪問層。
(2)ORM提供了對數據庫的映射,不用sql直接編碼,能夠像操作對象一樣與數據庫進行交互。
2、在Python中,最有名的ORM框架是SQLAlchemy。
在使用之前,可通過pip install sqlalchemy命令完成該模塊的安裝。
仍然以MySQL數據庫爲例,編碼之前需要在數據庫中建立下面的表:
create table user(id varchar(20) not null, name varchar(20) not null, primary key (id));
create table book(id varchar(20) not null, name varchar(20) not null, user_id varchar(20), primary key(id));
下面是我的學習代碼:
from sqlalchemy import Column, String, create_engine, ForeignKey
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy.ext.declarative import declarative_base
#動態定義用於將表實體化的基類
Base = declarative_base()
#用於將表user實體化的類
class User(Base):
__tablename__ = 'user'
id = Column(String(20), primary_key = True)
name = Column(String(20))
books = relationship('Book')
#用於將表book實體化的類
class Book(Base):
__tablename__ = 'book'
id = Column(String(20), primary_key = True)
name = Column(String(20))
user_id = Column(String(20), ForeignKey('user.id'))
user = relationship('User', backref='Book')
#測試入口
def Test():
#用於連接數據庫
engine = create_engine('mysql+mysqlconnector://root:alvin@localhost:3306/test')
#初始化連接對象
DBSession = sessionmaker(bind = engine)
session = DBSession()
#通過ORM實現新增記錄操作
new_user = User(id='11', name='Tom')
session.add(new_user)
new_book = Book(id='9', name='book1', user_id='11')
session.add(new_book)
new_book = Book(id='10', name='book2', user_id='5')
session.add(new_book)
#提交數據操作
session.commit()
#通過ORM實現查詢數據操作
user = session.query(User).filter(User.id == '5').one()
print user.name if user else 'None'
print ('there are %d books of %s' % (len(user.books), user.name)) if user else 'None'
books = session.query(Book).filter(Book.user_id == '5')
if books:
for b in books:
print 'book(%s:%s) belong to %s' % (b.id, b.name, b.user.name)
#關閉連接
session.close()
今天就學習到這裏,下一節從WEB開發學起。