def testFullResultSet(self): """ Function to test all the functionality of the ResultSet """ #ResultSet is a very simple function. This function should #create a ResultSet, fill it with data, and then read it #out, all in one go. testSet = ResultSet() testDict = {'column1': 'value1', 'column2':'value2'} binds = [ {'column1':'value3a', 'column2': 'value2a'}, {'column1':'value3b', 'column2': 'value2b'}, {'column1':'value3c', 'column2': 'value2c'}] self.myThread.dbi.processData('insert into test_tablec (column1, column2) values (:column1, :column2)', testDict) self.myThread.dbi.processData('insert into test_tablec (column1, column2) values (:column1, :column2)', binds) testProxy = self.myThread.dbi.connection().execute('select * from test_tablec') #import pdb #pdb.set_trace() testSet.add(testProxy) #Test to make sure fetchone and fetchall both work self.assertEqual(str(testSet.fetchone()[0]), 'value1') self.assertEqual(str(testSet.fetchall()[-1][1]), 'value2c')
def test1000Binds(self): testSet2 = ResultSet() #Now insert and select a huge number of values #This depends on the times variable binds = [ ] largeInsert = [ ] times = 1000 #For now I don't want to get too dependent on processData() with many binds, since right now #it doesn't work. That does make things awkward though. for i in range(times): binds = {'column1': 'value1'+str(i), 'column2':'value2'+str(i)} self.myThread.dbi.processData("insert into test_tablec (column1, column2) values (:column1, :column2)", binds) sql = "select column1 from test_tablec" testProxy = self.myThread.dbi.connection().execute(sql) testSet2.add(testProxy) self.assertEqual(len(testSet2.fetchall()), times) dialect = self.myThread.dialect.lower() if dialect == 'mysql': self.assertEqual(str(testSet2.fetchall()[1][0]), 'value11') self.assertEqual(testSet2.fetchone()[0], 'value10') elif dialect == 'oracle': self.assertEqual(str(testSet2.fetchall()[1][0]), 'value11') self.assertEqual(testSet2.fetchone()[0], 'value10') return
def executebinds(self, s=None, b=None, connection=None, returnCursor=False): """ _executebinds_ returns a list of sqlalchemy.engine.base.ResultProxy objects """ if b == None: resultProxy = connection.execute(s) else: resultProxy = connection.execute(s, b) if returnCursor: return resultProxy result = ResultSet() result.add(resultProxy) resultProxy.close() return result
def executemanybinds(self, s=None, b=None, connection=None, returnCursor=False): """ _executemanybinds_ b is a list of dictionaries for the binds, e.g.: b = [ {'bind1':'value1a', 'bind2': 'value2a'}, {'bind1':'value1b', 'bind2': 'value2b'} ] see: http://www.gingerandjohn.com/archives/2004/02/26/cx_oracle-executemany-example/ Can't executemany() selects - so do each combination of binds here instead. This will return a list of sqlalchemy.engine.base.ResultProxy object's one for each set of binds. returns a list of sqlalchemy.engine.base.ResultProxy objects """ s = s.strip() if s.lower().endswith('select', 0, 6): """ Trying to select many """ if returnCursor: result = [] for bind in b: result.append(connection.execute(s, bind)) else: result = ResultSet() for bind in b: resultproxy = connection.execute(s, bind) result.add(resultproxy) resultproxy.close() return self.makelist(result) """ Now inserting or updating many """ result = connection.execute(s, b) return self.makelist(result)
def testRowCount(self): testSet = ResultSet() insertProxy = self.myThread.dbi.connection().execute("insert into test (bind1, bind2) values ('a', 'b')") testSet.add(insertProxy) self.assertEqual(testSet.rowcount, 1) updateProxy = self.myThread.dbi.connection().execute("update test set bind1 = 'c'") testSet.add(updateProxy) self.assertEqual(testSet.rowcount, 2) updateProxy = self.myThread.dbi.connection().execute("update test set bind1 = 'c' where bind1 = 'a'") testSet.add(updateProxy) self.assertEqual(testSet.rowcount, 2) insertProxy = self.myThread.dbi.connection().execute("insert into test (bind1, bind2) values ('a', 'b')") testSet.add(insertProxy) self.assertEqual(testSet.rowcount, 3) selectProxy = self.myThread.dbi.connection().execute("select * from test") testSet.add(selectProxy) self.assertEqual(testSet.rowcount, 5) selectProxy = self.myThread.dbi.connection().execute("delete from test") testSet.add(selectProxy) self.assertEqual(testSet.rowcount, 7)
def testRowCount(self): testSet = ResultSet() insertProxy = self.myThread.dbi.connection().execute( "insert into test_tablec (column1, column2) values ('a', 'b')") testSet.add(insertProxy) self.assertEqual(testSet.rowcount, 1) updateProxy = self.myThread.dbi.connection().execute( "update test_tablec set column1 = 'c'") testSet.add(updateProxy) self.assertEqual(testSet.rowcount, 2) updateProxy = self.myThread.dbi.connection().execute( "update test_tablec set column1 = 'c' where column1 = 'a'") testSet.add(updateProxy) self.assertEqual(testSet.rowcount, 2) insertProxy = self.myThread.dbi.connection().execute( "insert into test_tablec (column1, column2) values ('a', 'b')") testSet.add(insertProxy) self.assertEqual(testSet.rowcount, 3) selectProxy = self.myThread.dbi.connection().execute( "select * from test_tablec") testSet.add(selectProxy) self.assertEqual(testSet.rowcount, 5) selectProxy = self.myThread.dbi.connection().execute( "delete from test_tablec") testSet.add(selectProxy) self.assertEqual(testSet.rowcount, 7)