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

news2024/11/19 9:28:40

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 sessionmaker
    
    engine = 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 sessionmaker

engine = 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, session

print("-----全部数据查询-----")
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.coloradmin.cn/o/681366.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云计算与OpenStack简介

文章目录 云计算与OpenStack简介什么是云服务模式部署模型 Openstac概述Openstack服务组件 云计算与OpenStack简介 什么是云 云是一种服务,就像我们去餐厅吃饭一样,只需要点菜,不需要知道厨师怎样烹饪食物。在云中,用户也只需要…

chatgpt赋能python:Python数据预处理:优化数据分析的重要步骤

Python数据预处理:优化数据分析的重要步骤 在数据分析过程中,数据预处理是非常重要的步骤。在这个阶段,我们可以清洗、转换和整理数据,以便更好地进行数据分析和建模。Python是一个强大的工具,可以帮助我们优化数据预…

Neural network-based clustering using pairwise constraints (ICLR-workshop 2016)

Neural network-based clustering using pairwise constraints (ICLR-workshop 2016) 源代码 摘要 这篇论文提出了一个基于神经网络的端到端的聚类框架。我们设计了一种新策略,除了学习适用于聚类的特征嵌入,还直接在源数据利用对比方法来推动数据形成…

计算机科学与技术报考指南【河南农业大学】

文章目录 前言环境介绍龙子湖校区文化路校区许昌校区 学院专业介绍计算机学习方面思维上态度上 最后 前言 这几年计算机分数虚高已经成为了不争的事实,加上计算机技术发展日新月异、大多数高校学习课程落后,转换思维另辟蹊径的报考农林类高校的计算机专…

WebSocket:基于 Spring Cloud 配置注解实现 WebSocket 集群方案

上一篇:WebSocket 的具体介绍与内部执行原理 文章目录 介绍用法抽象思路转发思路连接流程获取服务实例信息连接区分和管理 消息发送连接选择给指定用户发送消息给指定路径发送消息 结束源码地址声明 介绍 WebSocket大家应该是再熟悉不过了,如果是单体应…

Debezium系列之:发布Debezium 2.3.0.Final

Debezium系列之:发布Debezium 2.3.0.Final 一、重大变化1.PostgreSQL / MySQL 安全连接更改2.JDBC 存储编码更改 二、新功能和改进1.Debezium Server支持K8s2.新的通知子系统3.新的可扩展信号子系统4.JMX 信号和通知集成5.新的 JDBC 存储子系统6.PostgreSQL 流式传输…

优化伊通河漂流旅行方案的模型——JLU数学学院2020级数学模型期末大作业

文章目录 题目描述背景介绍模型假设问题一的模型决策树模型游客安全最大化与旅行次数最大化模型统筹考虑游客安全与旅行次数的模型模型对比 第二问的模型每天下水的脚踏游船与电动游船的比率的敏感性分析全是电动游船的情形全是脚踏游船的情形每天下水的脚踏游船与电动游船成比…

【深度学习笔记】神经网络概述

本专栏是网易云课堂人工智能课程《神经网络与深度学习》的学习笔记,视频由网易云课堂与 deeplearning.ai 联合出品,主讲人是吴恩达 Andrew Ng 教授。刚兴趣的网友可以观看网易云课堂的视频进行深入学习,视频的链接如下:https://mo…

前端Vue自定义等宽标签栏标题栏选项卡

前端Vue自定义等宽标签栏标题栏选项卡&#xff0c; 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13170 效果图如下&#xff1a; # cc-chooseTab #### 使用方法 使用方法 <!-- tabArr:标签数组 current&#xff1a;当前选择序…

Linux 实用操作技巧一

文章目录 Linux 实用操作技巧前言查找当前目录下所有 .gz 结尾的文件查找当前目录超过30天没有修改过且文件大于10M的.gz文件。将software 目录下大于 100k 的文件移动至 /tmp下 时间戳快速转换动态查看日志&#xff0c;并且停止获取内存、CPU、磁盘、IO等信息获取 公网 ip总结…

关于 SpringBoot 日志文件的知识

目录 日志有什么用&#xff1f; 日志怎么用&#xff1f; 自定义日志打印 在程序中得到日志对象 使用日志对象打印日志 日志格式 日志级别的分类与使用 日志级别设置 日志持久化 日志有什么用&#xff1f; 日志对于我们来说&#xff0c;最主要的用途就是排除和定位问题…

Java设计模式之行为型-模板方法模式

目录 一、概念 二、角色设计 三、代码实现 四、总结 一、概念 定义一个操作中的算法骨架&#xff0c;而将算法的一些步骤延迟到子类当中&#xff0c;使得子类可以不改变该算法结构的情况下重定义该算法的特定步骤&#xff0c;即在一个抽象类中公开定义了执行某一方法的模板…

一种新颖的智能优化算法—飞蛾扑火优化(MFO)算法

飞蛾扑火优化(Moth-Flame Optimization,MFO)算法是Mirjalili于2015年提出的一种新型智能优化算法&#xff0c;其灵感来源于一种特殊的导航机制—横向定位导航,实现了勘探与开发的较好平衡以获得全局优化性能。MFO算法具有并行优化能力强&#xff0c;全局性优且不易落入局部极值…

VS安装中报“应用程序无法启动,因为应用程序的并行配置不正确”的解决办法

1.问题描述 安装应用程序的时候&#xff0c;提示“应用程序无法启动&#xff0c;因为应用程序的并行配置不正确”。 2.解决过程 方法一 开启服务 开始→ 运行&#xff08;输入services.msc或者服务&#xff09;→确定后打开服务&#xff1b;找到Windows Modules Installer服务…

Advanced Installer使用指南

PC打包软件有很多 我只推荐一个advanced Installer完全傻瓜式操作&#xff0c;直接点就行了。innoSetUp需要学习它的脚本语言&#xff0c;学习成本太高了&#xff0c;而且网上的学习资料也很少。其它东西 增加依赖 我的程序需要dotNet5.0.13的运行时环境。 但是在AI上面没有…

chatgpt赋能python:Python撤销和回退的完全指南:从基础到高级

Python撤销和回退的完全指南&#xff1a;从基础到高级 Python是一种强大的编程语言&#xff0c;但即使在最好的情况下&#xff0c;错误也会出现。在此时&#xff0c;撤销错误和回退操作会变得非常重要。本指南将介绍Python中的撤销和回退操作&#xff0c;从基础操作到高级操作…

SparkSQL之AstBuilder

Spark SQL是基于ANTLR实现的&#xff0c;前文中有关于ANTLR的介绍文章《ANTLR实战》和《设计模式之访问者模式》&#xff0c;这篇文章主要介绍的内容是AstBuilder类。 Catalyst中提供了直接面向用户的ParseInterface接口&#xff0c;该接口中包含了对SQL语句、Expression表达式…

DDD(领域驱动设计) 核心概念浅析

文章目录 DDD(领域驱动设计) 核心概念浅析前言贫血模型什么是贫血模型贫血模型的优点贫血模型的缺点 充血模型充血模型的优点充血模型的缺点 DP 概念抽象接口简单概念简单概念流程&#xff1a;实现 统一语言和模型价值DP 和 Entity 的区别 Aggregate&#xff08;聚合&#xff0…

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

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

vscode 出现 No such file or directory 的解决办法(python tkinter)

问题 Traceback (most recent call last): File “e:\Github\Python-GUI\PyQt-Fluent-Widgets\examples\navigation\demo.py”, line 202, in w Window() File “e:\Github\Python-GUI\PyQt-Fluent-Widgets\examples\navigation\demo.py”, line 95, in init self.initWindo…