python orm_python ORM框架:SqlAlchemy

ORM,对象关系映射,即Object Relational Mapping的简称,通过ORM框架将编程语言中的对象模型与数据库的关系模型建立映射关系,这样做的目的:简化sql语言操作数据库的繁琐过程(原生sql的编写及拼接等),转而直接使用对象模型来操作数据库做替代

第一部分

SqlAlchemy本身无法直接操作数据库,它是建立在第三方数据库API(如python 中的pymysql库)之上,应用程序调用对象模型进行增删改查等操作时,将对象转化成sql语句,然后再通过API调用执行已经转换好的sql语句

安装

pip install sqlalchemy

pip install pymysql #这里笔者使用的数据API是pymysql

应用

- 配置及创建数据库引擎

SqlAlchemy 支持间接调用多种数据库API,根据不能的配置文件调用不同的数据库API

#常见配置文件:即database url,创建数据库引擎需要

MySQL-Python:mysql+mysqldb://:@[:]/

pymysql:mysql+pymysql://:@/[?]

MySQL-Connector:mysql+mysqlconnector://:@[:]/

cx_Oracle:oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]

- 创建数据库引擎

* 注意 *:带上charset=utf8参数,防止中文乱码

#初始化数据库连接

from sqlalchemy import create_engine

url="mysql+pymysql://[账号]:[密码]@[主机]:[端口]/[数据库]?charset=utf8" #这里笔者使用的mysql数据库,pymysql API与数据库交互,添加的charset可防止中文乱码

engine=create_engine(url,echo=False,encoding="utf-8") #url为配置文件,echo调试参数,值为为true打印整个sql执行过程

- 创建会话(session)

通过sessionmaker工厂方法,我们得到一个类,默认返回Session类,也可以自定义Session类

方法:

sessionmaker( bind=None, class_=Session, autoflush=True,autocommit=False,expire_on_commit=True,info=None, **kw)

#示例1:直接调用sessionmaker

from sqlalchemy.orm import sessionmaker

SessionClass=sessionmaker(bind=engine)#利用工厂模式获取SessionClass

session_obj=SessionClass() #创建session对象,此时已绑定数据库引擎,但是未关联任何的对象模型

#示例1:使用scoped_session

from sqlalchemy.orm import scoped_session

SessionClass=scoped_session(sessionmaker(bind=engine))#利用工厂模式获取SessionClass

session_obj=SessionClass() #创建session对象,此时已绑定数据库引擎,但是未关联任何的对象模型

scoped_session VS Session

Session:多次创建的Session对象是不同的

scoped_session:首先通过sessionmaker工厂创建Session对象,然后对Session对象进行相应的管理(先在Registry中找之前是否创建过Session,若没有,则创建并注册,有,则直接返回),这样的目的:同一个线程维护一个session对象,保证了线程的安全性

- 与数据库交互

常用操作:与sql语言一致,主要是增删改查,接下来就简要概述这4大类

******* 增 *******

session.add(object) #在数据库中增加一个对象实例

session.add_all([object]) #在数据库中增加多个对象实例,参数为列表形式

session.commit() #提交,否则未入口

******* 查 *******

#备注:以下均已object代表对象模型,object.prop代表对象object的prop属性

session.query(object) #查询object对应的关系表,相当于select * from tables

session.query(object).first() #查询结果取第一条,没有返回none

session.query(object).filter(object.prop) #条件查询,filter相当于where

session.query(object).order_by(object.prop) #排序,默认升序,降序用desc

session.query(object).order_by(object.prop.desc()).limit(10) #降序,及限制10条

session.query(object.prop.label("别名")).filter(object.prop.like("%同同mony")) #模糊查询及给字段取别名

#使用聚合函数,sum、count等

from sqlalchemy import func

session.query(func.sum(object.prop).label("别名")

******* 改 *******

session.query(object).filter(object.prop>20).update({"prop1": ‘values‘})#批量更新,若没有过滤条件,这更新表中所有记录

myuser = Session.query(object).filter(object.prop>20).first()

object.prop2= ‘value2‘ #单条更新,可直接修改对象

session.commit()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值