ORM介绍
orm全称object relational mapping,就是对象映射关系程序。
简单来说,对于面向对象的语言来说一切皆对象,但是我们使用的数据库却都是关系型的。
为了保证一致的使用习惯,通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,
这样我们在使用编程语言对数据库进行操作的时候可以直接使用类似面向对象的操作进行,而不用直接使用sql语言。
也就是对sql功能的封装,在以后使用时,通过对象.方法来进行增删改查。
orm的优点:
- 隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑SQL语句。快速开发,由此而来。
- ORM使我们构造固化数据结构变得简单易行。
缺点:
- 无可避免的,自动化意味着映射和关联管理,代价是牺牲性能(早期,这是所有不喜欢ORM人的共同点)。现在的各种ORM框架都在尝试使用各种方法来减轻这块(LazyLoad,Cache),效果还是很显著的。
orm使用
在Python中,最有名的ORM框架是SQLAlchemy。
1、创建表格和插入数据
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
#创建连接
'''什么数据库+数据库的包://用户名:密码@主机/数据库名称(db)'''
engine = create_engine("mysql+pymysql://root:35278479@localhost/us_states",
encoding='utf-8', echo=True) #echo打印所有信息
Base = declarative_base() # 生成orm基类
#表的类,表的结构
class User(Base): #继承基类
__tablename__ = 'user' # 表名
#下面3个是列
id = Column(Integer, primary_key=True) #column是导入的
name = Column(String(32))
password = Column(String(64))
'''创建表格'''
Base.metadata.create_all(engine)
Session_class = sessionmaker(bind=engine) #返回的是类,创建与数据库的会话session类 ,这里返回给session的是个class,不是实例
Session = Session_class() #这里再实例化,生成session实例,这个session就和pymysql里的cursor一样
'''插入数据'''
#这里就是面向对象的形式创建每一行的数据了
user_obj = User(name="lkk", password="lkk111") # 生成你要创建的数据对象1
user_obj2 = User(name="lihua", password="lihua111") # 生成你要创建的数据对象2
print(user_obj.name, user_obj.id) # 此时还没创建对象,打印一下id发现还是None
Session.add(user_obj) # 把要创建的数据对象添加到这个session里, 一会统一创建
Session.add(user_obj2)
print(user_obj.name, user_obj.id) # 此时也依然还没创建
Session.commit() # 现此才统一提交,创建(插入)数据
未完待续……