何謂ORM
Object Relational Mapping(對象關系映射)
ORM用途
ORM把對象模型表示的對象映射到基于SQL 的關系模型數據庫結構中去。這樣,我們在具體的操作實體對象的時候,就不需要再去和復雜的 SQ L 語句打交道,只需簡單的操作實體對象的屬性和方法 。
ORM原理.png
ORM模型的簡單性簡化了數據庫查詢過程。使用ORM查詢工具,用戶可以訪問期望數據,而不必理解數據庫的底層結構。
使用示例
SQLAlchemy是Python中最流行的ORM庫之一,這里使用SQLAlchemy作為示例講解.
連接一個僅內存的SQLite數據庫:
>>> from sqlalchemy import create_engine
>>> engine = create_engine('sqlite:///:memory:', echo=True)
聲明映射,生成基類:
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
定義一個表(類):
from sqlalchemy import Column, Integer, String
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
fullname = Column(String)
password = Column(String)
def __repr__(self):
return "<User(name='%s', fullname='%s', password='%s')>" % (
self.name, self.fullname, self.password)
我們現在創建并檢查User對象:
>>> ed_user = User(name='ed', fullname='Ed Jones', password='edspassword')
>>> ed_user.name
'ed'
>>> ed_user.password
'edspassword'
>>> str(ed_user.id)
'None'
與數據庫會話:
當我們首次啟動應用程序時,與我們的create_engine()語句相同,我們定義一個Session類,作為新的Session對象:
>>> from sqlalchemy.orm import sessionmaker
>>> Session = sessionmaker(bind=engine)
添加和更新對象:
要保留我們的User對象,我們add()到我們的Session:
>>> ed_user = User(name='ed', fullname='Ed Jones', password='edspassword')
>>> session.add(ed_user)
我們可以使用add_all()一次添加更多User:
>>> session.add_all([
... User(name='wendy', fullname='Wendy Williams', password='foobar'),
... User(name='mary', fullname='Mary Contrary', password='xxg527'),
... User(name='fred', fullname='Fred Flinstone', password='blah')])
查詢操作:
>>> our_user = session.query(User).filter_by(name='ed').first()
修改數據:
>>> ed_user.password = 'f8s7ccs'
此時,數據庫實際并未被改變,需要進一步做提交操作:
>>> session.commit()
commit()刷新數據庫中剩余的任何更改,并提交事務