def _execute_python(self, operation: str, parameters: parameters_type = None) -> 'Cursor': """ Execute operation with Python based statement preparation. Args: operation: the query you want to execute parameters: an optional iterable containing arguments for the operation. Returns: the cursor object itself Raises: OperationalError: if the execution failed """ self._check_connection() self.description = None # which will be set later in fetchall self.connection.cleanup_result() splitted = strip_split_and_clean(operation) if len(splitted) == 0: raise ProgrammingError("Empty query") if len(splitted) > 1: raise ProgrammingError("Multiple queries in one execute() call") formatted = format_query(operation, parameters) self.connection.result, self.rowcount = self.connection.query( formatted, make_result=True) self.connection.total_changes += self.rowcount self._set_description() return self
def executemany( self, operation: str, seq_of_parameters: Union[Iterator, Iterable[Iterable]]) -> 'Cursor': """ Prepare a database operation (query or command) and then execute it against all parameter sequences or mappings found in the sequence seq_of_parameters. Args: operation: the SQL query to execute seq_of_parameters: An optional iterator or iterable containing an iterable of arguments """ self._check_connection() self.description = None # which will be set later in fetchall if self.result: self.connection.lowlevel.cleanup_result( self.result) # type: ignore self.result = None total_affected_rows = 0 if operation[:6].lower().strip() == 'select': raise ProgrammingError( "Don't use a SELECT statement with executemany()") if hasattr(seq_of_parameters, '__iter__'): iterator = iter(seq_of_parameters) else: iterator = seq_of_parameters # type: ignore # mypy gets confused here while True: try: parameters = next(iterator) except StopIteration: break formatted = format_query(operation, parameters) self.result, affected_rows = self.connection.lowlevel.query( formatted, make_result=True) # type: ignore total_affected_rows += affected_rows self.rowcount = total_affected_rows self.connection.total_changes += total_affected_rows self._set_description() return self
def execute(self, operation: str, parameters: Optional[Iterable] = None) -> 'Cursor': """ Execute operation Args: operation: the query you want to execute parameters: an optional iterable containing arguments for the operation. Returns: the cursor object itself Raises: OperationalError: if the execution failed """ self._check_connection() self.description = None # which will be set later in fetchall self._fetch_generator = None if self.result: self.connection.lowlevel.cleanup_result( self.result) # type: ignore self.result = None splitted = strip_split_and_clean(operation) if len(splitted) == 0: raise ProgrammingError("Empty query") if len(splitted) > 1: raise ProgrammingError("Multiple queries in one execute() call") formatted = format_query(operation, parameters) self.result, self.rowcount = self.connection.lowlevel.query( formatted, make_result=True) # type: ignore self.connection.total_changes += self.rowcount self._set_description() return self