| 195 | self.values = values |
| 196 | |
| 197 | async def run( |
| 198 | self, |
| 199 | node: Optional[str] = None, |
| 200 | in_pool: bool = True, |
| 201 | ) -> None: |
| 202 | if not self.row._exists_in_db: |
| 203 | raise ValueError("This row doesn't exist in the database.") |
| 204 | |
| 205 | TableClass = self.row.__class__ |
| 206 | |
| 207 | primary_key = TableClass._meta.primary_key |
| 208 | primary_key_value = getattr(self.row, primary_key._meta.name) |
| 209 | |
| 210 | if primary_key_value is None: |
| 211 | raise ValueError("The primary key is None") |
| 212 | |
| 213 | columns = [ |
| 214 | TableClass._meta.get_column_by_name(i) if isinstance(i, str) else i |
| 215 | for i in self.values.keys() |
| 216 | ] |
| 217 | |
| 218 | response = ( |
| 219 | await TableClass.update(self.values) |
| 220 | .where(primary_key == primary_key_value) |
| 221 | .returning(*columns) |
| 222 | .run( |
| 223 | node=node, |
| 224 | in_pool=in_pool, |
| 225 | ) |
| 226 | ) |
| 227 | |
| 228 | for key, value in response[0].items(): |
| 229 | setattr(self.row, key, value) |
| 230 | |
| 231 | def __await__(self) -> Generator[None, None, None]: |
| 232 | """ |