I have a fastapi edpoint for updating records in the database, but it doesn't seem to work as intended and I get the following error when I call the endpoint to update a record:
  File "/usr/src/app/app/api/controllers/records.py", line 137, in update_record_endpoint
    updated_record = update_record(session, id, record)
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/app/app/api/controllers/records.py", line 61, in update_record
    session.commit()
  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/orm/session.py", line 1431, in commit
    self._transaction.commit(_to_root=self.future)
... rest of the error ...
  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1498, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1862, in _execute_context
    self._handle_dbapi_exception(
  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 2043, in _handle_dbapi_exception
    util.raise_(
  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
    raise exception
  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1819, in _execute_context
    self.dialect.do_execute(
  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/default.py", line 732, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.IntegrityError: (psycopg2.errors.UniqueViolation) duplicate key value violates unique constraint "record_pkey"
DETAIL:  Key (id)=(bc2a4eeb-a8f0-4a6b-a976-91fb630b281b) already exists.
Code:
from pgvector.sqlalchemy import Vector
from sqlalchemy import text
## model
class Record(SQLModel, table=True):
    id: UUID = Field(default_factory=uuid4, primary_key=True)
    text: str = Field(default=None)
    start: int = Field(default=None)
    vector: List[float] = Field(default=None, sa_column=Vector(1536))
    parent_id: UUID = Field(default=None, foreign_key="parent.id")
## controller
def update_record(session: Session, id: UUID, record: RecordUpdate):
    query = text("SELECT * FROM record WHERE id = :id")
    result = session.execute(query, {"id": id}).fetchone()
    if not result:
        return None
    db_record = Record.from_orm(result)
    if not db_record:
        return None
    for key, value in record.dict().items():
        if hasattr(db_record, key) and value is not None:
            setattr(db_record, key, value)
    session.add(db_record)
    session.commit()
    session.refresh(db_record)
    return db_record
In another controller I'm using session.get(Parent, id) and the updating process works fine, but for this specific controller I'm using session.execute(text("query")) because of this issue and update doesn't work (violates unique constraint ). How can I fix this issue?
 
    