<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def n1ql_query(self, query, *args, **kwargs):
 """ Execute a N1QL query. This method is mainly a wrapper around the :class:`~.N1QLQuery` and :class:`~.N1QLRequest` objects, which contain the inputs and outputs of the query. Using an explicit :class:`~.N1QLQuery`:: query = N1QLQuery( 'SELECT airportname FROM `travel-sample` WHERE city=$1', "Reno") # Use this option for often-repeated queries query.adhoc = False for row in cb.n1ql_query(query):
 print 'Name: {0}'.format(row['airportname']) Using an implicit :class:`~.N1QLQuery`:: for row in cb.n1ql_query( 'SELECT airportname, FROM `travel-sample` WHERE city="Reno"'):
 print 'Name: {0}'.format(row['airportname']) With the latter form, *args and **kwargs are forwarded to the N1QL Request constructor, optionally selected in kwargs['iterclass'], otherwise defaulting to :class:`~.N1QLRequest`. :param query: The query to execute. This may either be a :class:`.N1QLQuery` object, or a string (which will be implicitly converted to one). :param kwargs: Arguments for :class:`.N1QLRequest`. :return: An iterator which yields rows. Each row is a dictionary representing a single result """

        if not isinstance(query, N1QLQuery):
            query = N1QLQuery(query)

        itercls = kwargs.pop('itercls', N1QLRequest)
        return itercls(query, self, *args, **kwargs)