SQLAlchemy ORM

何谓ORM

Object Relational Mapping(对象关系映射)

ORM用途

ORM把对象模型表示的对象映射到基于SQL 的关系模型数据库结构中去。这样,我们在具体的操作实体对象的时候,就不需要再去和复杂的 SQ L 语句打交道,只需简单的操作实体对象的属性和方法 。

SQLAlchemy ORM_第1张图片
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 "" % (
                           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()刷新数据库中剩余的任何更改,并提交事务

你可能感兴趣的:(SQLAlchemy ORM)