使用 python 中的函数创建 oracle 连接

create oracle connection using function in python

我正在尝试为 oracle 连接创建一个函数,它将采用下面代码中提到的参数,但似乎有些问题...

任何人都可以帮助理解如何更正它以及我在这里缺少什么吗?

import cx_Oracle

def sqlconnect(user,passwd,SID, query):
    connStr = cx_Oracle.connect('user/passwd@SID')
    cursor = connStr.cursor()
    cursor.execute(query)
    return cursor.fetchall()

if __name__ == '__main__':
    sqlconnect('user','password','XEE','select * from dual')

提前致谢!

我认为还有另一种方法使用 f-strings:

import cx_Oracle

def sqlconnect(user,passwd,dsn, query):
    connStr = cx_Oracle.connect(f'{user}/{passwd}@{dsn}')
    cursor = connStr.cursor()
    cursor.execute(f'{query}')
    return cursor.fetchall()

if __name__ == '__main__':
    sqlconnect('user','password','localhost/SID','select * from dual')

字符串 user/passwd@SID 不是有效的连接字符串。除非 XEE 是 tnsnames.ora 条目,否则您需要在连接字符串中引用主机名和服务名。你可能想要这样的东西,而不是:

def sqlconnect(user, passwd, dsn, query):
    conn = cx_Oracle.connect(user=user, password=passwd, dsn=dsn)
    cursor = conn.cursor()
    cursor.execute(query)
    return cursor.fetchall()

if __name__ == '__main__':
    host = "my_host_name"
    service_name = "XEE"
    conn_string = f"{host}/{service_name}"
    sqlconnect("user", "password", conn_string, "select * from dual")

您可以参考下面的内容 link 这有助于您了解 Python 如何连接到 Oracle 数据库并且您缺少 TNS 条目或完整服务 JDBC URL 及以下是一些样本:

https://www.oracle.com/database/technologies/appdev/python/quickstartpythononprem.html

https://oracle.github.io/python-cx_Oracle/samples/tutorial/Python-and-Oracle-Database-Scripting-for-the-Future.html