при первом использовании sqlalchemy и flask я что-то пропускаю
Я пытаюсь установить взаимно-однозначное соотношение между двумя таблицами с помощью Flask-SQLalchemy.
Это мойпервая таблица (родитель)
class User(db.Model):
__tablename__ = 'users'
user_id = Column(Integer, primary_key=True, autoincrement=True)
user_email = Column(String(150), nullable=False)
user_password = Column(String(60), nullable=False)
child_employee = relationship('Employee', uselist=False, backref='users')
def __init__(self, user_email, user_password):
self.user_email = user_email
self.user_password = user_password
и дочерний элемент
class Employee(User):
__tablename__ = 'employees'
employee_id = Column(Integer, primary_key=True, autoincrement=True)
user_id = Column(Integer, ForeignKey('users.user_id'), nullable=False)
employee_lastname = Column(String(30), nullable=False)
employee_firstname = Column(String(30), nullable=False)
employee_comment = Column(String)
def __init__(self, user_email, user_password, employee_lastname, employee_firstname, employee_comment=None):
super().__init__(user_email, user_password)
self.employee_lastname = employee_lastname
self.employee_firstname = employee_firstname
self.employee_comment = employee_comment
Знайте, когда я создаю пользователя, в моей таблице есть пользователь «пользователи» и ничего в моей таблице »сотрудники ": это имеет смысл, идеально
Тогда, если я создаю сотрудника, у меня будет новая запись в моей таблице" сотрудники "и новая запись в моей таблице" пользователи ".Они связаны друг с другом: это также имеет смысл, прекрасно
Теперь вопрос: Я создал пользователя, поэтому ни один сотрудник не связан с ним.Теперь я хочу создать сотрудника и связать его с уже существующим пользователем, как я могу это сделать?
Я пытался
# creation of the new employee
new_employee = Employee(exisiting_user.user_email,
exisiting_user.user_password, "email", "lastname", "firstname")
#trying to associate the new employee to the already existing user
exisiting_user.child_employee = new_employee
# save the employee to the database
db.session.add(new_employee)
db.session.commit()
, но я получаю эту ошибку
sqlalchemy.exc.IntegrityError: (psycopg2.IntegrityError) duplicate key value violates unique constraint "users_pkey"
DETAIL: Key (user_id)=(2) already exists.
[SQL: 'INSERT INTO users (user_id, user_email, user_password) VALUES (%(user_id)s, %(user_email)s, %(user_password)s)'] [parameters: {'user_id': 2, 'user_email': 'email', 'user_password': 'password'}]
Спасибо ---------------- Сначала попробуйте решить его ------------------------- Как будто я правильно понимаю, когда я создаю экземпляр «Сотрудник», у меня также есть экземпляр суперкласса «Пользователь».Затем, когда я db.session.add (new_employee), SQLalchemy создает INSERT для сотрудника, а затем для пользователя, но пользователь уже существует, поэтому у меня есть ошибка.
Я изменяю свою таблицу Employee:
class Employee(User):
__tablename__ = 'employees'
employee_id = Column(Integer, ForeignKey(User.user_id), primary_key=True)
employee_lastname = Column(String(30), nullable=False)
employee_firstname = Column(String(30), nullable=False)
employee_comment = Column(String)
parent = relationship("User", back_populates="child_employee")
def __init__(self, employee_id, employee_lastname, employee_firstname, employee_comment=None):
self.employee_id = employee_id
self.employee_lastname = employee_lastname
self.employee_firstname = employee_firstname
self.employee_comment = employee_comment
и для добавления только сотрудника я делаю
emp = Employee(1, "lastname", "firstname", "comment")
db.session.execute("INSERT INTO employees VALUES("emp.employee_id",'"emp.employee_lastname+"', '"+emp.employee_firstname+"', '"+emp.employee_comment+"')")
Из-за идентификатора, который также является внешним ключом, сотрудник и пользователь автоматически связываются
Это работает, но я бы предпочел использовать что-то более простое, например db.session.add (emp), я все еще что-то упускаю