美文网首页
SQLAlchemy ORM

SQLAlchemy ORM

作者: PPMac | 来源:发表于2017-08-18 10:46 被阅读155次

    何谓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()刷新数据库中剩余的任何更改,并提交事务

    相关文章

      网友评论

          本文标题:SQLAlchemy ORM

          本文链接:https://www.haomeiwen.com/subject/bvborxtx.html