Функция подключения к БД (cx_ Oracle), вызываемая из другой функции, дает "AttributeError: объект 'NoneType' не имеет атрибута 'cusror'" - PullRequest
0 голосов
/ 03 августа 2020

У меня есть два файла python, и у каждого есть одна функция:

a.py (Эта функция предназначена для соединения oracle db)

def db_conection(username,password,dbname,encoding):
    # print(username,password,dbname,encoding)
    try:
         connection = cx_Oracle.connect(username, password, dbname, encoding=encoding)

        # show the version of the Oracle Database
         print(connection.version)
    except cx_Oracle.Error as error:
        print(error)
    finally:
        # release the connection
        if connection:
            connection.close()

b.py

from a import *



def set_schema(user):
    con = db_conection(username,password,dbname,encoding)
    cur = con.cursor()
    print(user)
    cur.execute("""alter session set current_schema = {}""".format(user))
    cur.close()


user = "ABCDE"
set_schema(user)

Проблема / ошибка, с которыми я сталкиваюсь, когда пытаюсь выполнить функцию set_schema (b.py)

           cur = con.cursor()
AttributeError: 'NoneType' object has no attribute 'cursor'

, если я просто бегу ниже статуса в b.py для функции set_schema, она работает

db_conection(username,password,dbname,encoding)

1 Ответ

0 голосов
/ 04 августа 2020

Прямое «решение»:

# a.py

def db_conection(username,password,dbname,encoding):
    try:
         connection = cx_Oracle.connect(username, password, dbname, encoding=encoding)
        # show the version of the Oracle Database
         print(connection.version)
         return connection
    except cx_Oracle.Error as error:
        print(error)

и

# b.py     

from a import *

def set_schema(user):
    con = db_conection(username,password,dbname,encoding)
    con.current_schema = user  # more efficient then executing ALTER

user = "ABCDE"
set_schema(user)

Конечно, после завершения db_connection() соединение будет закрыто, но, надеюсь, вы только что привели пример код, чтобы показать вашу проблему. Вы можете посмотреть на подклассы .

Если вы используете многопользовательский режим, вы можете использовать пул соединений и использовать обратный вызов сеанса для установки атрибутов сеанса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...