вставить запрос не работает Python Oracle - PullRequest
0 голосов
/ 05 мая 2018

У меня есть оракул версии 11g и python 3 в моей системе. Однако, когда я пытаюсь выполнить определенный запрос вставки, он не будет работать. Это всегда бросает не связанное исключение. Я проверил свое соединение, и запросы на выборку работают нормально.

Моя конечная цель - зарегистрировать пользователя в базе данных и затем вернуть его идентификатор строки.

Что я сделал?

def db_register_applicant(applicant_name,password,years_of_experience,prefered_technology,skill_set):
    try:
        con=DBConnectivity.create_connection()
        cur=DBConnectivity.create_cursor(con)
        skills=skill_set.split(",")
        db_skills=[]
        applicant_id_db=None
        cur.execute("select skill_name from skills")

        for skill_name in cur:
            db_skills.append(skill_name)

        final_skills=[]
        for x in skills:
            if x not in db_skills:
                final_skills.append(x)


        cur.execute("select nvl(max(applicant_id),0) from applicant")
        last_row_id=int(cur.fetchone()[0]) // works till here, if i print this, it prints 7

        query="insert into applicant (applicant_id,applicant_name,password,years_of_experience,prefered_technology) values ('%d','%s','%s','%d','%s')"%\
                (last_row_id+1,applicant_name,password,years_of_experience,prefered_technology,skill_set)
        cur.execute(query)
        applicant_id_db=last_row_id+1
        for x in final_skills:
            cur.execute("select nvl(max(skill_id),0) from skills")
            skill_max=int(cur.fetchone()[0])
            print(skill_max)
            query="insert into skills values (skill_id,skill_name) values ('%d','%s')"%\
                (skill_max+1,x)
            cur.execute(query)
        con.commit() 
    finally:
        con.close()
        cur.close()
        return applicant_id_db

Эта функция вызывается из этой функции:

def register():
    try:
        print("Enter the applicant name:")
        name=input()
        print("Enter the password:")
        password=input()
        print("Enter your skill set:")
        skill_set=input()
        print("Enter the number of years of experience:")
        experience=int(input())
        print("Enter prefered technology:")
        prefered_tech=input()
        if check_experience(experience) and check_password(password):
            applicant_id=db_register_applicant(name, password, experience, prefered_tech, skill_set)
            print("Your applicant id is :"+applicant_id)


    except Exception as e:
        print("Sorry,Some system error occured")
        print(e)

выход

Извините, произошла системная ошибка

не подключен

Код моего файла подключения:

import cx_Oracle
def create_connection():
    return cx_Oracle.Connection('something/something@ip/somethingother')

def create_cursor(con):
    return cx_Oracle.Cursor(con)

Что не так с моим кодом?

Обновление

Изменен оператор finally в db_register_applicant, и теперь он не выдает никаких исключений, но вставка по-прежнему не работает.

finally:
        cur.close()
        con.close()
        return applicant_id_db
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...