Python-ORM----Sqlalchemy


Python-ORM

什么是ORM?

​ ORM(object relational mapping), 就是对象关系映射,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的,为了保证一致的使用习惯,通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了,而不用直接使用sql语言。

ORM 相当于把数据库也实例化,在代码操作mysql中级又加了orm这一层。

ORM 的优点:

  1. 隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句。快速开发,由此而来。

  2. 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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值