python - 使用python连接oracle数据库(cx_oracle)

标签 python oracle cx-oracle

我正在尝试使用 python 中的 cx_Oracle 连接到 oracle 数据库。我能够连接到数据库并提取数据。

现在我正在尝试连接到另一个数据库,我必须首先调用安全过程,然后只有我才能看到基础表中的数据。您能否通过调整以下代码块来帮助我调用该过程。我的程序如下: exec ef.applogin('1234')

def connect_oracle():
    import cx_Oracle
    import pandas as pd
    ip = 'some_ip'
    port = 1521
    SID = 'some_SID'
    dsn_tns = cx_Oracle.makedsn(ip, port, SID)
    connection = cx_Oracle.connect('user_name', 'password', dsn_tns)
    #Procedure to be executed here..    
    query = """ SELECT * from table_name """
    df_ora = pd.read_sql(query, con=connection)
    return df_ora

connect_oracle()

非常感谢!

最佳答案

为 Oracle 连接创建 def。对于执行过程使用光标。不要忘记关闭连接和光标。也有异常(exception)的情况。

import cx_Oracle
import pandas as pd

ip = 'some_ip'
port = 1521
SID = 'some_SID'
user_name = 'user_name'
password = 'password'
query = """ SELECT * from table_name """

def connect_oracle(ip, port, SID, user_name, password):
    dsn_tns = cx_Oracle.makedsn(ip, port, SID)
    connection = cx_Oracle.connect(user_name, password, dsn_tns)
    return connection

def get_df(conn, query):
    df_ora = pd.read_sql(query, con=conn)
    return df_ora


def execute_proc(conn, procname, param):    
    my_cursor=conn.cursor()
    my_cursor.callproc(procname, param)
    conn.commit()

def execute_func(conn, procname, param):    
    my_cursor=conn.cursor()
    out_parameter = my_cursor.var(cx_Oracle.NUMBER)
    qw = my_cursor.callfunc(procname, out_parameter)
    return qw

conn1 = connect_oracle(ip, port, SID, user_name, password)
df = get_df(conn1, query)
df.head()
execute_proc(conn1, "insert_temp", [])
execute_func(conn1, "get_version", [])

测试函数:

create or replace function get_version
return number
is
    v_version NUMBER(8) := 11;
begin
    return v_version;
end;

测试程序:

create table temp (clm number);
create or replace procedure insert_temp
is
    v_version NUMBER(8) := 11;
begin
    insert into temp(clm) values(v_version);
end;
select *  from temp

关于python - 使用python连接oracle数据库(cx_oracle),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58300862/

相关文章:

python - 将列表序列化为 JSON

sql - Oracle 的 USE database_name 命令替代方案

performance - 优化 MERGE 语句的 SORT MERGE 连接

python - 与厚模式相比,python-oracledb 瘦模式是否对性能有任何影响?

windows - Python 3.6,用于 64 位 Windows 上 11g 客户端的 cx_oracle

python - 具有 __init_subclass__ 和可子分类注册表的注册表模式

python - 使模块可用于 python 项目中的每个文件

python - 如何在灰色图像上覆盖红色的热图 numpy 数组?

sql - 为什么 oracle isqlplus localhost 无法在我的浏览器中打开?

python - 当我的目的只是读取现有的 Oracle 数据库时,为什么 django 尝试创建迁移表