zoukankan      html  css  js  c++  java
  • python操作oracle数据库

    前言:最近处理迁移数据库事项,oracle导入没什么好的工具导入数据(plsql没mac版),试用下py速度挺好的。仅此记录下

    安装连接oracle的库

    看了下别的数据库,貌似oracle真的麻烦的多..

    import cx_Oracles

     在当前项目使用的venv目录下 teminal, pip install -i https://pypi.douban.com/simple cx_oracle 下载(py3.7+)

    如图即安装成功!

    尝试连接时,报错can not create oracle client,忘截图了。此处会给个提示解决问题的网站。需要安装oracle的即时客户端。

    https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html#installing-cx-oracle-on-macos-intel-x86

    实战示例

    可先查看各个版本是否ok

    import sqlalchemy as sqla
    import pandas as pd
    import cx_Oracle
    
    # Test to see if it will print the version of sqlalchemy
    print(sqla.__version__)    # this returns 1.2.15 for me
    
    # Test to see if the cx_Oracle is recognized
    print(cx_Oracle.version)   # this returns 8.0.1 for me
    
    # This fails for me at this point but will succeed after the solution described below
    cx_Oracle.clientversion()
    import cx_Oracle # 导入库
    
    cx_Oracle.init_oracle_client(lib_dir="/xx/Downloads/instantclient_19_8")# 需要初始化客户端才行
    
    connection = cx_Oracle.connect("username", "password", "ip/dbname") # 建立连接,也可建立连接池,再获取连接
    cursor = connection.cursor() # 获得游标
    
    file_object = open('xx.txt') # 获取文件
    list_all = file_object.readlines() # 获取所有行
    
    for line in list_all: # 遍历执行,这里可以exectemany批量执行
        cursor.execute(line)
    
    connection.commit()
    
    for result in cursor.execute("select count(*) from table"):
        print(result)
    
    cursor.close()
    connection.close()

    exectemany批量执行

    students = [ [10,'萧十一',32], [11,'何十二',40], [12,'穆十三',35] ]

    cur.executemany('insert into table (id, name, age) values (:1, :2, :3)', students)

    connection.commit()

    连接池连接 

    # 创建连接池
    pool = cx_Oracle.SessionPool("username", "password",
            "ip:1521/dbname", min=2, max=5, increment=1, encoding="UTF-8")
    
    # 从连接池中获取一个连接
    connection = pool.acquire()
    
    # 使用连接进行查询
    cursor = connection.cursor()
    for result in cursor.execute("select * from table"):
        print(result)
    
    # 将当前的连接放回连接池
    pool.release(connection)
    
    # 关闭连接池
    pool.close()
    我始终记住:青春是美丽的东西,而且对我来说,它永远是鼓舞的源泉。——(现代)巴金
  • 相关阅读:
    top指令
    Trie
    最大公约数
    angular2 获取到的数据无法实时更新的问题
    npm install 的时候出现 write access 导致不能成功安装的问题
    angular 的 @Input、@Output 的一个用法
    windows 安装 apache 服务以及添加 php 解析
    php 性能优化之opcache
    intellij 插件结构(文件结构以及概念层面上的结构)
    jetBrains 插件开发第一课-- 在主菜单栏新增一个菜单
  • 原文地址:https://www.cnblogs.com/flyinglion/p/15133488.html
Copyright © 2011-2022 走看看