def test_str_subclass(self): class StrSubClass(str): pass x = StrSubClass('test') csub = convert(x) cstr = convert('test') self.assertEqual(csub, cstr)
def execute(self, operation, parameters=None): # type: (str, Optional[Dict]) -> int """Prepare and execute a database operation (query or command). Parameters may be provided as mapping and will be bound to variables in the operation. """ self._query_id = -1 self.description = None self._rows = [] if not self.connection: self._exception_handler(ProgrammingError, "cursor is closed") # clear message history self.messages = [] if operation == self.operation: # same operation, DBAPI mentioned something about reuse # but monetdb doesn't support this pass else: self.operation = operation query = "" if parameters: if isinstance(parameters, dict): query = operation % { k: monetize.convert(v) for (k, v) in parameters.items() } elif type(parameters) == list or type(parameters) == tuple: query = operation % tuple( [monetize.convert(item) for item in parameters]) elif isinstance(parameters, str): query = operation % monetize.convert(parameters) else: msg = "Parameters should be None, dict or list, now it is %s" self._exception_handler(ValueError, msg % type(parameters)) else: query = operation if query[0] == '#': # skip comment return 0 if query.find(';') < 0: query += ';\n' if query[-1:] != '\n': query += '\n' block = self.connection.cmd(query) self._store_result(block) self.rownumber = 0 self._executed = operation return self.rowcount
def execute(self, operation, parameters=None): """Prepare and execute a database operation (query or command). Parameters may be provided as mapping and will be bound to variables in the operation. """ if not self.connection: self.__exception_handler(ProgrammingError, "cursor is closed") # clear message history self.messages = [] # convert to utf-8 if PY2: if type(operation) == unicode: # don't decode if it is already unicode operation = operation.encode('utf-8') else: operation = u(operation).encode('utf-8') # set the number of rows to fetch if self.arraysize != self.connection.replysize: self.connection.set_replysize(self.arraysize) if operation == self.operation: # same operation, DBAPI mentioned something about reuse # but monetdb doesn't support this pass else: self.operation = operation query = "" if parameters: if isinstance(parameters, dict): query = operation % dict([(k, monetize.convert(v)) for (k, v) in parameters.items()]) elif type(parameters) == list or type(parameters) == tuple: query = operation % tuple( [monetize.convert(item) for item in parameters]) elif isinstance(parameters, str): query = operation % monetize.convert(parameters) else: msg = "Parameters should be None, dict or list, now it is %s" self.__exception_handler(ValueError, msg % type(parameters)) else: query = operation block = self.connection.execute(query) while self.__store_result(block) != None: block = self.connection.mapi.read_response() self.rownumber = 0 self.__executed = operation return self.rowcount
def execute(self, operation, parameters=None): """Prepare and execute a database operation (query or command). Parameters may be provided as mapping and will be bound to variables in the operation. """ if not self.connection: self.__exception_handler(ProgrammingError, "cursor is closed") # clear message history self.messages = [] # convert to utf-8 if PY2: if type(operation) == unicode: # don't decode if it is already unicode operation = operation.encode('utf-8') else: operation = u(operation).encode('utf-8') # set the number of rows to fetch if self.arraysize != self.connection.replysize: self.connection.set_replysize(self.arraysize) if operation == self.operation: # same operation, DBAPI mentioned something about reuse # but monetdb doesn't support this pass else: self.operation = operation query = "" if parameters: if isinstance(parameters, dict): query = operation % dict([(k, monetize.convert(v)) for (k, v) in parameters.items()]) elif type(parameters) == list or type(parameters) == tuple: query = operation % tuple([monetize.convert(item) for item in parameters]) elif isinstance(parameters, str): query = operation % monetize.convert(parameters) else: msg = "Parameters should be None, dict or list, now it is %s" self.__exception_handler(ValueError, msg % type(parameters)) else: query = operation block = self.connection.execute(query) self.__store_result(block) self.rownumber = 0 self.__executed = operation return self.rowcount
def execute(self, operation, parameters=None): # type: (str, Optional[Dict]) -> int """Prepare and execute a database operation (query or command). Parameters may be provided as mapping and will be bound to variables in the operation. """ if not self.connection: self._exception_handler(ProgrammingError, "cursor is closed") # clear message history self.messages = [] if PY2: operation = ensure_binary(operation) # set the number of rows to fetch if self.arraysize != self.connection.replysize: self.connection.set_replysize(self.arraysize) if operation == self.operation: # same operation, DBAPI mentioned something about reuse # but monetdb doesn't support this pass else: self.operation = operation query = "" if parameters: if isinstance(parameters, dict): query = operation % { k: monetize.convert(v) for (k, v) in parameters.items() } elif type(parameters) == list or type(parameters) == tuple: query = operation % tuple( [monetize.convert(item) for item in parameters]) elif isinstance(parameters, str): query = operation % monetize.convert(parameters) else: msg = "Parameters should be None, dict or list, now it is %s" self._exception_handler(ValueError, msg % type(parameters)) else: query = operation block = self.connection.execute(query) self._store_result(block) self.rownumber = 0 self._executed = operation return self.rowcount
def bind(self, operation, parameters): if parameters: if isinstance(parameters, dict): query = operation % { k: monetize.convert(v) for (k, v) in parameters.items() } elif type(parameters) == list or type(parameters) == tuple: query = operation % tuple( [monetize.convert(item) for item in parameters]) elif isinstance(parameters, str): query = operation % monetize.convert(parameters) else: msg = "Parameters should be None, dict or list, now it is %s" else: query = operation return query
def bindsingle(self, parameter): return monetize.convert(parameter)
def test_customtype(self): t = ["list", "test"] self.assertRaises(ProgrammingError, monetize.convert, t) monetize.mapping_dict[list] = str self.assertEqual(monetize.convert(t), "['list', 'test']")
def test_timedelta(self): x = datetime.timedelta(days=5, hours=2, minutes=10) self.assertEqual(convert(x), "INTERVAL '439800' SECOND")
def test_time(self): x = datetime.time(12, 5) self.assertEqual(convert(x), "TIME '12:05:00'")
def test_date(self): x = datetime.date(2017, 12, 6) self.assertEqual(convert(x), "DATE '2017-12-06'")
def test_datetime(self): x = datetime.datetime(2017, 12, 6, 12, 30) self.assertEqual(convert(x), "TIMESTAMP '2017-12-06 12:30:00'")