SQLAlchemy ORM

何謂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()刷新數據庫中剩余的任何更改,并提交事務

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容