何谓ORM
Object Relational Mapping(对象关系映射)
ORM用途
ORM把对象模型表示的对象映射到基于SQL 的关系模型数据库结构中去。这样,我们在具体的操作实体对象的时候,就不需要再去和复杂的 SQ L 语句打交道,只需简单的操作实体对象的属性和方法 。
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()刷新数据库中剩余的任何更改,并提交事务