У меня есть оракул версии 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