python中的ORM

来源:转载

ORM
对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。那么,到底如何实现持久化呢?一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法。

ORM的方法论基于三个核心原则:
· 简单:以最基本的形式建模数据。
· 传达性:数据库结构被任何人都能理解的语言文档化。
· 精确性:基于数据模型创建正确标准化了的结构。

优点:
隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句。快速开发,由此而来。
ORM使我们构造固化数据结构变得简单易行。
缺点:
无可避免的,自动化意味着映射和关联管理,代价是牺牲性能(早期,这是所有不喜欢ORM人的共同点)。现在的各种ORM框架都在尝试使用各种方法来减轻这块(LazyLoad,Cache),效果还是很显著的。

以SQLAlchemy为讲讲

 通过命令:pip install SQLalchemy来安装,可以通过print sqlalchemy.__version__ 来查看安装的版本。

以下是一个简单的例子:

from sqlalchemy import Column, String, create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

# 创建对象的基类(生成orm基类):
Base = declarative_base()

# 定义User对象:
class User(Base):
# 表的名字:
tablename = ‘user’

# 表的结构:id = Column(String(20), primary_key=True)name = Column(String(20))

# 初始化数据库连接:
engine = create_engine(‘mysql+mysqlconnector://root:[email protected]:3306/test’)
# 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例(可以看成是事务):
DBSession = sessionmaker(bind=engine) # 实例和engine绑定
session = DBSession() #生成session实例,相当于游标
# 创建新User对象:
new_user = User(id=’5’, name=’Bob’)
# 添加到session:
session.add(new_user)
# 提交即保存到数据库:
session.commit()
# 关闭session:
session.close()

SQLAlchemy本身无法操作数据库,其必须以来pymsql等第三方插件,Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如:
#MySQL-Python
engine = create_engine(‘mysql+mysqldb://:@[:]/’)
#pymysql
engine = create_engine(‘mysql+pymysql://:@/[?]’)
#MySQL-Connector
engine = create_engine(‘mysql+mysqlconnector://:@[:]/’)
#cx_Oracle
engine = create_engine(‘oracle+cx_oracle://user:[email protected]:port/dbname[?key=value&key=value…]’)

写的有点乱,主要是自己在学习的过程中,用来记录的,有问题的跑出来大家一起讨论,共同进步。

分享给朋友:
您可能感兴趣的文章:
随机阅读: