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