什么是ORM?
ORM(object relational mapping), 就是对象关系映射,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的,为了保证一致的使用习惯,通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了,而不用直接使用sql语言。
ORM 相当于把数据库也实例化,在代码操作mysql中级又加了orm这一层。
ORM 的优点:
隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句。快速开发,由此而来。
ORM使我们构造固化数据结构变得简单易行。
sqlalchemy
在Python中,最有名的ORM框架是SQLAlchemy。用户包括openstack\Dropbox等知名公司或应用.
安装依赖库:
pip install pymysql
pip install sqlalchemy
SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。SQLAlchemy本身无法操作数据库,其必须以来pymsql等第三方插件,Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作:
相关连接语句如下:
MySQL - Python (python2.7推荐) mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname> pymysql (python3.5以上版本推荐使用) mysql+pymysql://<username>:<password>@<host>:<port>/<dbname>[?<options>] MySQL - Connector mysql + mysqlconnector: // < user >: < password > cx_Oracle (oracle数据连接) oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]
ORM 案例分析
以下根据继承了Base类的类的 映射函数 必须 写在 类之后, 否则 建表不成功
Base.metadata.create_all(engine)
# -*- coding: utf-8 -*- __author__ = 'zhougy' __date__ = '2018/6/7 上午9:33' ''' 采用sqlalchemy定义实体类,进行ORM操作 依赖库: pip install sqlalchemy pip install pymysql ''' from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker from sqlalchemy import Column, Integer, String, ForeignKey ''' 数据库连接拼接串语法: mysql_conn_str = "mysql+pymysql://username:password@IP:PORT/database" ''' mysql_conn_str = "mysql+pymysql://django:123456@172.16.245.202:3306/toscrape" engine = create_engine(mysql_conn_str) Base = declarative_base() class Book(Base): __tablename__ = "toscrape_book" id = Column(Integer, primary_key=True) #create id column, set it auto_increment. book_title = Column(String(200)) image_url = Column(String(300)) book_url = Column(String(300)) book_rate = Column(String(50)) book_price = Column(String(15)) ''' 初始化DB,进行模型 --> 数据库 同步 ''' def _create_db_table(): Base.metadata.create_all(engine) def create_session(): _create_db_table() Session = sessionmaker(bind=engine) session = Session() return session ''' add record to session. objs --> (1) [obj1, obj2] (2) obj ''' def add_records(session, objs): if isinstance(objs, list): session.add_all(objs) else: session.add(objs) session.commit() ''' 查询数据模型中的db数据 ''' def query_records(session, Cls): return session.query(Cls).all() if __name__ == "__main__": session = create_session() ''' records = query_records(session, Book) for rec in records: print("title: " + rec.book_title + ", image_url:" + rec.image_url) '''
相关参考文档:
https://blog.csdn.net/fgf00/article/details/52949973