Python连接Oracle数据库多种方式详解及示例代码展示

目录

  • 前言
  • 1. SQLAlchemy
  • 2. oracledb
  • 3. cx_Oracle
  • 前言

    库/包 描述 优点 缺点 使用场景
    oracledb Oracle 官方 Python 客户端库。 – 官方支持
  • 直接与 Oracle 数据库交互
  • 配置灵活 – 配置可能较为复杂
  • 主要用于直接数据库操作,不支持 ORM 需要直接与 Oracle 数据库交互的场景
    cx_Oracle Oracle 官方 Python 客户端库。 – 官方支持
  • 功能全面
  • 适用于多种 Oracle 数据库操作 – 安装和配置较复杂
  • 需要手动管理连接和资源 直接数据库操作,支持复杂查询
    SQLAlchemy 通用的 SQL 工具包和 ORM,支持多种数据库,包括 Oracle。 – 支持多种数据库
  • 提供 ORM 功能,简化数据库操作
  • 统一接口 – 学习曲线陡峭
  • 对于简单操作可能过于复杂 需要 ORM 支持或跨数据库操作场景
  • 1. SQLAlchemy

    推荐使用这个包,写的比较详细:详细分析Python中的SQLAlchemy库(附Demo)

    2. oracledb

    官方提供的 Python 客户端库,用于连接和操作 Oracle 数据库

    是 cx_Oracle 的继任者,并在很多方面进行了改进和优化

    1. 安装与配置pip install oracledb

    2. Oracle 客户端:需要 Oracle Instant Client
      安装路径需要在系统环境变量中配置,或者在代码中指定路径

    import oracledb
    oracledb.init_oracle_client(lib_dir=r"D:\instantclient_21_10")
    
    1. 连接数据库
      连接字符串(DSN):可以使用 DESCRIPTION 或 TNS 配置字符串。支持直接的 IP 地址和端口,或使用 TNS 名称
    connection = oracledb.connect(user='username', password='password', dsn=dsn)
    
    1. 执行 SQL 查询
      使用 cursor 对象来执行 SQL 语句
    cursor = connection.cursor()
    cursor.execute("SELECT * FROM my_table")
    results = cursor.fetchall()
    
    1. 事务管理
      提交事务:需要显式地调用 commit(),connection.commit()
      回滚事务:需要显式地调用 rollback(),connection.rollback()
      错误处理:通过捕获异常来处理数据库操作中的错误
    try:
        # 执行操作
        pass
    except oracledb.DatabaseError as e:
        print(e)
    
    1. 游标与连接管理
      关闭游标和连接:在完成数据库操作后,需要关闭游标和连接以释放资源
    cursor.close()
    connection.close()
    

    最终的测试Demo如下:

    import oracledb
    
    # 数据库连接信息
    dsn = (
        "(DESCRIPTION="
        "(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.197.0.200)(PORT=1521)))"
        "(CONNECT_DATA=(SERVICE_NAME=prod)))"
    )
    username = 'root'
    password = 'root'
    oracledb.init_oracle_client(lib_dir=r"D:\instantclient_21_10")
    # 创建连接
    connection = oracledb.connect(user=username, password=password, dsn=dsn)
    
    try:
        # 创建一个游标
        cursor = connection.cursor()
    
        # SQL 查询语句
        sql_query = """
    	sql语句
        """
    
        # 执行查询
        cursor.execute(sql_query)
    
        # 获取所有结果
        results = cursor.fetchall()
    
        # 打印结果
        for row in results:
            print(row)
    except Exception as e:
        print(e)
    
    finally:
        # 关闭游标和连接
        cursor.close()
        connection.close()
    

    3. cx_Oracle

    Python 中连接 Oracle 数据库的官方库

    支持多种 Oracle 数据库功能,并且是 Oracle 官方推荐的客户端库之一

    和上面同理,配置一个客户端,讲讲差异之处

    特性 优点 缺点
    性能 高性能,支持大数据量处理和高并发操作
    功能 支持复杂的数据库功能,如绑定变量、批量操作、PL/SQL 存储过程
    官方支持 由 Oracle 官方提供和维护,确保兼容性和稳定性
    配置复杂性 配置 Oracle 客户端和库可能较为复杂
    库更新频率 版本更新可能较慢,需关注新版本的兼容性
    资源管理 需要手动管理连接和游标,资源管理较为繁琐
    多线程支持 具有良好的多线程支持,可以在多线程环境下高效运行

    最终的测试Demo如下:

    import cx_Oracle
    
    # 设置 Oracle 客户端库路径
    cx_Oracle.init_oracle_client(lib_dir=r"D:\instantclient_21_10")
    
    # 连接数据库
    dsn = cx_Oracle.makedsn('10.197.0.200', 1521, service_name='prod')
    connection = cx_Oracle.connect(user='root', password='root', dsn=dsn)
    
    # 执行查询
    cursor = connection.cursor()
    query = """
    sql语句
    """
    cursor.execute(query)
    results = cursor.fetchall()
    
    # 打印结果
    for row in results:
        print(row)
    
    # 关闭游标和连接
    cursor.close()
    connection.close()
    

    作者:码农研究僧

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python连接Oracle数据库多种方式详解及示例代码展示

    发表回复