def test_execute_statement_with_params(self): entry_count = 20 self._populate_map(entry_count, lambda v: Student(v, v)) statement = SqlStatement( "SELECT age FROM %s WHERE height = CAST(? AS REAL)" % self.map_name) statement.add_parameter(13.0) result = self.client.sql.execute_statement(statement) six.assertCountEqual(self, [13], [row.get_object("age") for row in result])
def execute_statement(self, query, *args, **kwargs): if self.is_v5_or_newer_client: return self.client.sql.execute(query, *args, **kwargs).result() # Compatibility with 4.x clients statement = SqlStatement(query) for arg in args: statement.add_parameter(arg) for key, value in kwargs.items(): setattr(statement, key, value) return self.client.sql.execute_statement(statement)
# Get the index of the is_active column is_active_index = row_metadata.find_column("is_active") # Get the object with the column index is_active = row.get_object_with_index(is_active_index) print(name, age, is_active) # Construct a statement object to control the properties of the query # Special keywords __key and this can be used to refer to key and value. # Also, a placeholder parameters can be specified statement = SqlStatement("SELECT __key, age FROM customers WHERE name LIKE ?") # Parameters will replace the placeholders on the server side statement.add_parameter("Jo%") statement.timeout = 5 with client.sql.execute_statement(statement) as result: # Row metadata can also be retrieved from the result row_metadata = result.get_row_metadata().result() for row in result: key = row.get_object("__key") age = row.get_object("age") print(key, age) # Parameters can be passed directly in the basic execution syntax result = client.sql.execute( "SELECT this FROM customers WHERE age > ? AND age < ?", 30, 40)