С psycopg2 в python я пытаюсь получить идентификатор отдела с использованием имени отдела для новых сведений о сотрудниках, вставив в качестве необработанного запроса. Но я не смог найти решение этой проблемы. Есть ли решение этой проблемы, которая поможет мне выполнить мою задачу?
Это моя база данных сотрудников:
Это мой код на 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()
Для отображения идентификатора отдела с использованием названия отдела можно выполнить следующий запрос:
deptname = str(input("Enter department name: "))
cur.execute("SELECT deptid FROM department WHERE department.deptname = %("
"deptname)s", {'deptname': deptname})
deptid = cur.fetchone()
Если вы хотите только 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})
psycopg2.IntegrityError: null value in column "deptid" violates not-null constraint
deptname
в запросе на вставку. Как вы хотите получить то, чего там нет?