Чтобы отобразить идентификатор отдела, используя название отдела в python с psycopg2?

1

С psycopg2 в python я пытаюсь получить идентификатор отдела с использованием имени отдела для новых сведений о сотрудниках, вставив в качестве необработанного запроса. Но я не смог найти решение этой проблемы. Есть ли решение этой проблемы, которая поможет мне выполнить мою задачу?

Это моя база данных сотрудников: Изображение 174551

Это мой код на Python:

import datetime

import psycopg2.extras
conn = psycopg2.connect(database="emp", user="postgres",
                        password="12345", host="127.0.0.1", 
port="5432")

cur = conn.cursor(cursor_factory = psycopg2.extras.RealDictCursor)

emp_name = str(input("Enter new employee name: "))

while True:
    gender = str(input("Type your gender: "))
    if gender == 'M' or gender == 'F':
        break

hire_date = input("Enter hire date(YYYY-MM-DD): ")
year, month, day = map(int, hire_date.split('-'))
hiredate = datetime.date(year, month, day)

salary = str(int(input("Enter your salary: ")))

deptname = str(input("Enter department name: "))

cur.execute("INSERT INTO employee(emp_name, gender, hire_date, salary,
 deptid) VALUES(%s, %s, %s, %s)",(emp_name, gender,hire_date, salary))

cur.execute("SELECT * FROM employee ORDER BY emp_no DESC LIMIT 1 WHERE 
  deptname = %(deptname)s", {'deptname': deptname})

rows = cur.fetchall()

print( '\n'.join( str( row ) for row in rows ) )

print( "Created successfully!" )
conn.commit()
conn.close()
  • 1
    Я не вижу поле deptname в запросе на вставку. Как вы хотите получить то, чего там нет?
Теги:
psycopg2

2 ответа

0
Лучший ответ

Для отображения идентификатора отдела с использованием названия отдела можно выполнить следующий запрос:

deptname = str(input("Enter department name: "))

cur.execute("SELECT deptid FROM department WHERE department.deptname = %("
            "deptname)s", {'deptname': deptname})
deptid = cur.fetchone()
0

Если вы хотите только deptid, используйте это.

 cur.execute('''SELECT d.deptid FROM department d 
        WHERE d.deptname =  %(deptname)s''', {'deptname': deptname})

Если вы хотите детали всех сотрудников в этом отделе

 cur.execute('''SELECT e.* FROM employee e JOIN department d 
               ON  d.deptid = e.deptid 
        WHERE d.deptname =  %(deptname)s''', {'deptname': deptname})
  • 0
    Получение ошибки, как это: psycopg2.IntegrityError: null value in column "deptid" violates not-null constraint

Ещё вопросы

Сообщество Overcoder
Наверх
Меню