111 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import sys
 | |
| 
 | |
| try:
 | |
|     from pymysql.tests import base
 | |
|     import pymysql.cursors
 | |
| except Exception:
 | |
|     # For local testing from top-level directory, without installing
 | |
|     sys.path.append('../pymysql')
 | |
|     from pymysql.tests import base
 | |
|     import pymysql.cursors
 | |
| 
 | |
| class TestSSCursor(base.PyMySQLTestCase):
 | |
|     def test_SSCursor(self):
 | |
|         affected_rows = 18446744073709551615
 | |
| 
 | |
|         conn = self.connections[0]
 | |
|         data = [
 | |
|             ('America', '', 'America/Jamaica'),
 | |
|             ('America', '', 'America/Los_Angeles'),
 | |
|             ('America', '', 'America/Lima'),
 | |
|             ('America', '', 'America/New_York'),
 | |
|             ('America', '', 'America/Menominee'),
 | |
|             ('America', '', 'America/Havana'),
 | |
|             ('America', '', 'America/El_Salvador'),
 | |
|             ('America', '', 'America/Costa_Rica'),
 | |
|             ('America', '', 'America/Denver'),
 | |
|             ('America', '', 'America/Detroit'),]
 | |
| 
 | |
|         try:
 | |
|             cursor = conn.cursor(pymysql.cursors.SSCursor)
 | |
| 
 | |
|             # Create table
 | |
|             cursor.execute(('CREATE TABLE tz_data ('
 | |
|                 'region VARCHAR(64),'
 | |
|                 'zone VARCHAR(64),'
 | |
|                 'name VARCHAR(64))'))
 | |
| 
 | |
|             conn.begin()
 | |
|             # Test INSERT
 | |
|             for i in data:
 | |
|                 cursor.execute('INSERT INTO tz_data VALUES (%s, %s, %s)', i)
 | |
|                 self.assertEqual(conn.affected_rows(), 1, 'affected_rows does not match')
 | |
|             conn.commit()
 | |
| 
 | |
|             # Test fetchone()
 | |
|             iter = 0
 | |
|             cursor.execute('SELECT * FROM tz_data')
 | |
|             while True:
 | |
|                 row = cursor.fetchone()
 | |
|                 if row is None:
 | |
|                     break
 | |
|                 iter += 1
 | |
| 
 | |
|                 # Test cursor.rowcount
 | |
|                 self.assertEqual(cursor.rowcount, affected_rows,
 | |
|                     'cursor.rowcount != %s' % (str(affected_rows)))
 | |
| 
 | |
|                 # Test cursor.rownumber
 | |
|                 self.assertEqual(cursor.rownumber, iter,
 | |
|                     'cursor.rowcount != %s' % (str(iter)))
 | |
| 
 | |
|                 # Test row came out the same as it went in
 | |
|                 self.assertEqual((row in data), True,
 | |
|                     'Row not found in source data')
 | |
| 
 | |
|             # Test fetchall
 | |
|             cursor.execute('SELECT * FROM tz_data')
 | |
|             self.assertEqual(len(cursor.fetchall()), len(data),
 | |
|                 'fetchall failed. Number of rows does not match')
 | |
| 
 | |
|             # Test fetchmany
 | |
|             cursor.execute('SELECT * FROM tz_data')
 | |
|             self.assertEqual(len(cursor.fetchmany(2)), 2,
 | |
|                 'fetchmany failed. Number of rows does not match')
 | |
| 
 | |
|             # So MySQLdb won't throw "Commands out of sync"
 | |
|             while True:
 | |
|                 res = cursor.fetchone()
 | |
|                 if res is None:
 | |
|                     break
 | |
| 
 | |
|             # Test update, affected_rows()
 | |
|             cursor.execute('UPDATE tz_data SET zone = %s', ['Foo'])
 | |
|             conn.commit()
 | |
|             self.assertEqual(cursor.rowcount, len(data),
 | |
|                 'Update failed. affected_rows != %s' % (str(len(data))))
 | |
| 
 | |
|             # Test executemany
 | |
|             cursor.executemany('INSERT INTO tz_data VALUES (%s, %s, %s)', data)
 | |
|             self.assertEqual(cursor.rowcount, len(data),
 | |
|                 'executemany failed. cursor.rowcount != %s' % (str(len(data))))
 | |
| 
 | |
|             # Test multiple datasets
 | |
|             cursor.execute('SELECT 1; SELECT 2; SELECT 3')
 | |
|             self.assertListEqual(list(cursor), [(1, )])
 | |
|             self.assertTrue(cursor.nextset())
 | |
|             self.assertListEqual(list(cursor), [(2, )])
 | |
|             self.assertTrue(cursor.nextset())
 | |
|             self.assertListEqual(list(cursor), [(3, )])
 | |
|             self.assertFalse(cursor.nextset())
 | |
| 
 | |
|         finally:
 | |
|             cursor.execute('DROP TABLE tz_data')
 | |
|             cursor.close()
 | |
| 
 | |
| __all__ = ["TestSSCursor"]
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     import unittest
 | |
|     unittest.main()
 | 
