Pridan nastroj na kontrolu spravnosti migraci.
This commit is contained in:
		
							parent
							
								
									b4e0bf7348
								
							
						
					
					
						commit
						d15e97447e
					
				
					 1 changed files with 58 additions and 0 deletions
				
			
		
							
								
								
									
										58
									
								
								db_compare.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								db_compare.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,58 @@ | ||||||
|  | #!/usr/bin/python3 | ||||||
|  | 
 | ||||||
|  | import psycopg2 | ||||||
|  | import psycopg2.extras | ||||||
|  | 
 | ||||||
|  | OLD_DB = "mam_old" | ||||||
|  | NEW_DB = "mamweb" | ||||||
|  | 
 | ||||||
|  | oldconn = psycopg2.connect(f"dbname={OLD_DB}") | ||||||
|  | newconn = psycopg2.connect(f"dbname={NEW_DB}") | ||||||
|  | 
 | ||||||
|  | oldcur = oldconn.cursor(cursor_factory=psycopg2.extras.DictCursor) | ||||||
|  | newcur = newconn.cursor(cursor_factory=psycopg2.extras.DictCursor) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Uses global variables oldcur, newcur! | ||||||
|  | def execute_simple(old_query, new_query=None): | ||||||
|  | 	if new_query is None: | ||||||
|  | 		new_query = old_query | ||||||
|  | 
 | ||||||
|  | 	oldcur.execute(old_query) | ||||||
|  | 	newcur.execute(new_query) | ||||||
|  | 
 | ||||||
|  | 	if oldcur.rowcount != newcur.rowcount: | ||||||
|  | 		raise ValueError(f"Queries '{old_query}' and '{new_query}' returned different number of rows ({oldcur.rowcount} and {newcur.rowcount})") | ||||||
|  | 
 | ||||||
|  | 	return(oldcur.fetchall(), newcur.fetchall()) | ||||||
|  | 
 | ||||||
|  | def check_same(old_row, new_row, old_fields, new_fields=None): | ||||||
|  | 	if type(old_fields) != list: | ||||||
|  | 		old_fields = [old_fields] | ||||||
|  | 
 | ||||||
|  | 	if new_fields is None: | ||||||
|  | 		new_fields = old_fields | ||||||
|  | 	 | ||||||
|  | 	fields = zip(old_fields, new_fields) | ||||||
|  | 
 | ||||||
|  | 	for old_field, new_field in fields: | ||||||
|  | 		if old_row[old_field] == new_row[new_field]: | ||||||
|  | 			continue | ||||||
|  | 		raise ValueError(f"Fields '{old_field}' and '{new_field}' differs for rows '{old_row}' and '{new_row}'") | ||||||
|  | 	return True | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def check_skola(): | ||||||
|  | 	old_query = "SELECT * FROM seminar_skoly ORDER BY id" | ||||||
|  | 	new_query = old_query | ||||||
|  | 
 | ||||||
|  | 	old_res, new_res = execute_simple(old_query,new_query) | ||||||
|  | 
 | ||||||
|  | 	res = zip(old_res,new_res) | ||||||
|  | 
 | ||||||
|  | 	for o,n in res: | ||||||
|  | 		check_same(o,n,['id','aesop_id','izo','nazev','kratky_nazev','ulice','mesto','psc','stat','je_zs','je_ss','poznamka']) | ||||||
|  | 
 | ||||||
|  | check_skola() | ||||||
|  | 
 | ||||||
		Loading…
	
		Reference in a new issue