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

news/2024/11/30 9:45:33/

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.ppmy.cn/news/559585.html

相关文章

最小化暗数据风险的 5 个步骤

超过一半的公司数据存储库包含哪些内容,但大多数人甚至不知道自己拥有什么?这是暗数据,是公司在不知不觉中收集的信息,它们不是日常业务交互的组成部分,因此通常位于后台。 虽然这些数据对于大多数公司来说似乎是不必…

天敏VC4000调试

公司让我测试一个从客户那儿返回的问题产品,老板给我的是天敏VC4000采集卡。 我从天敏官网下载了驱动,各个版本及客户端,尝试了两三天天都没解决问题,是通过拨打天敏技服电话,让他远程协助解决的。 我觉得我犯的主要错…

java 使用JNA连接天敏VC4000采集卡

突然发现自己快成了专门调硬件的了 废话不多说了,正题开始 使用的库 1.官方的两个dll(Mix.dll,Sa7134Capture.dll),可能对应不同版本,我这是6.0的,附件里有 2.jna的jar包,注意是两个…

天敏SDK2500开发小计

之前一个项目需要用天敏的卡做图片采集 实现是可以做,但是缺点是:1 图片没法子实时抓取,会滞后1秒左右,客户没法子接受。。。。 2 不知道是我没有处理好还是什么,很容易导致CPU 很高 优点:1 SDK真简单&…

视频采集卡二次开发(天敏SDK2500+openCV)

视频开发难点 做视频二次开发最常遇到的问题有两个,一个是算法分析的问题,就是图像处理的问题,另一个就是视频流的问题,就是串口和数据解码的问题。通常来说,科研领域大多在研究前者,而民间的发烧友大多在…

android版本4.4.2导航,天敏D8+_rk3288_Android_4.4.2_kiui7_蓝光导航极速版

新一代超强四核芯片处理器RK3288开创了芯片业界三个第一的时代——全球第一个四核ARM Cortex-A17内核芯片,全球第一个支持最新超强Mali-T76x系列GPU的芯片以及全球第一个4Kx2K 硬解H.265的芯片。支持最新Mali-T76x系列GPU的芯片,性能提升500%;支持4Kx2K实时硬解H.265的芯片,…

c#天敏sdk2000的视频采集卡简单调用

1:例子使用的是天敏sdk2000的视频采集卡 申明: //初始化话设备 [DllImport("DSStream.dll")] public static extern bool DSStream_Initialize(); [DllImport("DSStream.dll")] public static extern void DSStre…

C#结合天敏VC4000采集卡视频监控

作者:wnety 转自:http://blog.csdn.net/wnety/article/details/7452303 准备:天敏VC4000视频采集卡的二次开发包有两个文件,分别是Sa7134Capture.dll和Mix.dll,缺一不可。 代码中使用的全是Sa7134Capture.dll中的方法…