【问题标题】:create oracle connection using function in python使用python中的函数创建oracle连接
【发布时间】:2022-01-20 07:40:39
【问题描述】:

我正在尝试为 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')

提前致谢!

【问题讨论】:

  • 您面临哪些问题
  • @MarmiteBomber:当我在我的 Linux 机器上执行上述代码时,它进入挂起状态,没有输出或任何错误。

标签: python python-3.x oracle cx-oracle


【解决方案1】:

字符串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")

【讨论】:

    【解决方案2】:

    您可以参考以下链接,该链接可帮助您了解 Python 如何连接到 Oracle db,并且您缺少 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

    【讨论】:

      【解决方案3】:

      我认为使用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')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-08
        • 2019-05-13
        • 2021-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-13
        • 1970-01-01
        相关资源
        最近更新 更多