Python 进阶(三):Python使用ORM框架SQLAlchemy操作Oracle数据库

Python使用ORM框架SQLAlchemy操作Oracle数据库

  • 前言
  • 1. 安装Oracle Instant Client
  • 2. 安装依赖库
  • 3. 导入模块并创建引擎
  • 4. 操作oracle数据库
    • 4.1 新增数据
    • 4.2 查询数据
    • 4.3 更新数据
    • 4.4 删除数据

前言

要详细连接Oracle数据库并使用SQLAlchemy进行操作,按照以下步骤进行配置和编写代码:

1. 安装Oracle Instant Client

Oracle Instant Client:Oracle 提供的客户端库,可用于在 Python 中连接和操作 Oracle 数据库

  1. 访问 Oracle 官方网站:前往 Oracle 官方网站(instant-client/winx64-64-downloads)
    可能需要创建一个免费的 Oracle 账号才能访问下载页面,然后根据你的操作系统和系统架构(32位或64位)下载,这里选择下载64位
    在这里插入图片描述

  2. 下载文件并解压到安装 Oracle 的目录中
    在这里插入图片描述

  3. 设置环境变量:在 Windows 上,将 Oracle Instant Client 的路径添加到 “Path” 环境变量中。
    在这里插入图片描述

  4. 将oracle客户端(就是新解压到安装目录的文件夹)目录下.dll文件复制到python环境下
    在这里插入图片描述
    在这里插入图片描述

  5. 修改oracle client目录下 tnsnames.ora
    如果目录下不存在该文件,则复制到该目录下
    在这里插入图片描述
    在这里插入图片描述
    修改文件内容
    在这里插入图片描述

  6. pycharm连接oracle测试

    from sqlalchemy.orm import declarative_base
    from sqlalchemy import create_engine, Column, Integer, String, text
    from sqlalchemy.orm import sessionmakerengine = create_engine("oracle+cx_oracle://system:root@192.168.0.146:1521/orcl")# 获取数据库连接对象
    connection = engine.connect()# 定义查询语句
    query = text("select sysdate from dual")# 执行查询
    result = connection.execute(query)# 处理查询结果
    for row in result:print(row)# 关闭数据库连接
    connection.close()
    

完成上述步骤后,Oracle Instant Client 就安装好了。使用相应的 Python 库(如 cx_Oracle)进行 Oracle 数据库连接和操作,提供正确的连接字符串和相关的配置信息(如用户名、密码、主机和端口等)即可

2. 安装依赖库

使用以下命令来安装SQLAlchemy和cx_Oracle库:

pip install SQLAlchemy
pip install cx_Oracle

在这里插入图片描述

3. 导入模块并创建引擎

在Python代码中,导入所需的模块。这包括SQLAlchemy的create_engine函数和相关类,以及cx_Oracle库。
操作:新建一个database.py类用于其他模块引用

from sqlalchemy.orm import declarative_base
from sqlalchemy import create_engine, Column, Integer, String, text
from sqlalchemy.orm import sessionmakerengine = create_engine("oracle+cx_oracle://system:root@192.168.0.146:1521/orcl")# 创建一个基础模型类,作为所有数据库模型类的基类
Base = declarative_base()# 创建映射类
class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String(50))age = Column(Integer)# 在数据库中创建表
Base.metadata.create_all(engine)# 获取数据库连接对象
connection = engine.connect()# 创建会话工厂
Session = sessionmaker(bind=engine)# 创建会话对象
session = Session()

在这里插入图片描述

4. 操作oracle数据库

4.1 新增数据

新建insert_users.py用于新增数据

# 引入数据库session模块和User映射类
from database import User, session# 创建数据
user = User(id=1, name='cxk', age=25)
session.add(user)user = User(id=2, name='徐州蔡徐坤', age=18)
session.add(user)user = User(id=3, name='阿坤', age=31)
session.add(user)# 用于提交当前会话中的所有挂起的事务操作
session.commit()# 全量数据查询
users = session.query(User).all()
for user in users:print(user.id, user.name, user.age)

在这里插入图片描述

4.2 查询数据

新建select_users.py用于数据查询

from database import User, sessionprint("-----全部数据查询-----")
users = session.query(User).all()
for user in users:print(user.id, user.name, user.age)print("-----查询年龄大于30的user-----")
users = session.query(User).where(User.age > 30)
for user in users:print(user.id, user.name, user.age)print("-----查询名字包含'坤'的user-----")
users = session.query(User).filter(User.name.like("%坤%"))
for user in users:print(user.id, user.name, user.age)

在这里插入图片描述

4.3 更新数据

新建update_book.py用于数据修改

# 引入数据库连接模块和Book映射类
from database import User, session# 全量数据查询
user = session.query(User).filter(User.id == 1).first()
print("修改前数据")
print(user.id, user.name, user.age)# 查询出年龄大于30的user
user.name = "修改name"
session.add(user)
session.commit();# 全量数据查询
user = session.query(User).filter(User.id == 1).first()
print("修改后的数据")
print(user.id, user.name, user.age)

在这里插入图片描述

4.4 删除数据

新建delete_users.py用于数据删除

# 引入数据库连接模块和Book映射类
from database import User, session# 全量数据查询
users = session.query(User).all()
print("删除前数据")
for user in users:print(user.id, user.name, user.age)# 查询出年龄大于30的user
users = session.query(User).where(User.age > 30)for user in users:# 删除数据session.delete(user)# 会话事务提交session.commit()# 全量数据查询
users = session.query(User).all()
print("删除后数据")
for user in users:print(user.id, user.name, user.age)

在这里插入图片描述
多说一句,没事别xjb执行删除操作,硬盘有价,数据无价!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/716.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

欧科云链在GEF论坛发起圆桌:监管科技与Web3合规发展图景与展望

6月15日,欧科云链在格林威治经济论坛发起了一场题为“监管科技与Web3合规发展图景与展望”的圆桌会议,此次会议由中国香港贸易发展局副执行董事PatrickLau博士主持。Stratford Finance首席执行官Angelina Kwan,BC科技集团有限公司董事会副主席…

【spring cloud学习】4、创建服务提供者

注册中心Eureka Server创建并启动之后,接下来介绍如何创建一个Provider并且注册到Eureka Server中,再提供一个REST接口给其他服务调用。 首先一个Provider至少需要两个组件包依赖:Spring Boot Web服务组件和Eureka Client组件。如下所示&…

功能测试的技术

目录 前言: 1) 基于最终用户/系统测试 2) 等价测试 3) 边界值测试 4) 基于决策的测试 5) 备用流量测试 6) 临时测试 前言: 功能测试是软件测试中最常见的一种测试类型,它旨在验证系统的功能是否符合设计要求和预期行为。在进行功能测…

HackTheBox - 学院【CPTS】复习1 - PASSWORD ATTACKS

前言 有一个月时间没发文章了,我在6月11号进入htb学院学习CPTS,在扎实的THM基础的加持下,我学的非常顺利,其实大部分内容都相当于复习,而学到的内容只是一些可能不太常见、又或者非常细节的小技巧,这也是非…

【Visual Studio】Qt 获取系统时间,并实时更新时间,使用 C++ 语言,配合 Qt 开发串口通信界面

知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 这个需求来源于这个工程:【Visual Studio】Qt 的实时绘图曲线功能,使用 C 语言,配合 Qt 开发串口通信界面。 文章目录 Qt…

PHP 税务申报征收系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 税务申报征收系统 是一套完善的WEB设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 代码下载 https://download.csdn.net/download/qq_41221322/87959340https://downl…

【数据库】MySQL主从同步失败或重启后需要重新配置同步,主从同步延迟解决方案,mysql主从同步加速

最近在学习MySQL,主从同步方案。由于是新手,如有出现错误的地方,请大家谅解并留言指正。MySQL不同的版本配置稍有不同,最新版本8.0.27是默认开启binarylog的,见下图 查询MySQL信息 SELECT version,NOW() ;show variabl…

蓝桥杯专题-试题版-【01字符串】【2n皇后问题】【A+B问题】【Fibonacci数列】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

uni-app uni.switchTab和uni.reLaunch跳转tabbar页面

uni.switchTab: 跳转列表不会刷新 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。 uni.reLaunch: 跳转列表会刷新 关闭所有页面,打开到应用内的某个页面。(可以跳转到tabBar 页面) 但如果是列表的自定…

CSS盒子模型

盒子模型 盒子模型盒子模型的介绍content内容区域的宽度和高度边框( border )内边距( padding )外边距(margin)盒子模型示例 盒子模型 目标:能够认识 盒子模型的组成 **,**能够掌握…

windows -- 自动安装python包,并启动服务

文章目录 定制python的包编写批处理文件遇到的问题 自动安装python的包,并启动后台服务进程。 定制python的包 基于python的Flask框架,简单开发一个服务器;编写发布python包的setup.py 在my_ff包的同级目录下创建一个setup.py&#xff0c…

linux -信号量semphore分析

linux -信号量分析 1 struct semaphore和sema_init1.1 struct semaphore1.2 sema_init 2 down3 up4 down_interruptible5 down_killable6 down_timeout7 down_trylock 基于linux-5.15分析,信号量在使用是是基于spin lock封装实现的。 1 struct semaphore和sema_ini…