sqlExport: Switch from REPLACE
to INSERT...ON DUPLICATE KEY UPDATE
REPLACE DELETES the row even when there was no change, creating a history entry even when none was needed or useful
This commit is contained in:
parent
01e08e1007
commit
516813b895
18
sqlExport.py
18
sqlExport.py
@ -22,11 +22,12 @@ def insertFromTableMap(table, data, tableMap):
|
|||||||
|
|
||||||
# TODO: this could probably be done better as a single statement?
|
# TODO: this could probably be done better as a single statement?
|
||||||
# note: this only works if in python >= 3.7 where `dict` is ordered
|
# note: this only works if in python >= 3.7 where `dict` is ordered
|
||||||
c.executemany('REPLACE INTO ' + table + ' (' +
|
c.executemany(
|
||||||
|
'INSERT INTO ' + table + ' (' +
|
||||||
','.join(f'`{k}`' for k in tableMap.keys()) +
|
','.join(f'`{k}`' for k in tableMap.keys()) +
|
||||||
') VALUES (' +
|
') VALUES (' + ','.join(len(tableMap) * ['%s']) + ') ' +
|
||||||
','.join(len(tableMap) * ['%s']) +
|
'ON DUPLICATE KEY UPDATE ' +
|
||||||
');',
|
', '.join(f'`{k}`=VALUES(`{k}`)' for k in tableMap.keys()) + ';',
|
||||||
list(formatRows(data)))
|
list(formatRows(data)))
|
||||||
|
|
||||||
# TODO: delete non-valid labels
|
# TODO: delete non-valid labels
|
||||||
@ -34,7 +35,10 @@ def insertLabels(members):
|
|||||||
for member in members:
|
for member in members:
|
||||||
for label, label_id in membershipworks._parse_flags()['labels'].items():
|
for label, label_id in membershipworks._parse_flags()['labels'].items():
|
||||||
if member[label]:
|
if member[label]:
|
||||||
c.execute('REPLACE INTO member_labels (uid, label_id) VALUES (%s, %s);',
|
c.execute("""
|
||||||
|
INSERT INTO member_labels (uid, label_id) VALUES (%s, %s)
|
||||||
|
ON DUPLICATE KEY UPDATE
|
||||||
|
uid=VALUES(uid), label_id=VALUES(label_id);""",
|
||||||
(member['Account ID'], label_id))
|
(member['Account ID'], label_id))
|
||||||
else:
|
else:
|
||||||
c.execute('DELETE FROM member_labels WHERE uid=%s && label_id=%s;',
|
c.execute('DELETE FROM member_labels WHERE uid=%s && label_id=%s;',
|
||||||
@ -91,7 +95,9 @@ try:
|
|||||||
if field.get('typ') == 8 and field['lbl'] in m: # check box
|
if field.get('typ') == 8 and field['lbl'] in m: # check box
|
||||||
m[field['lbl']] = True if m[field['lbl']] == 'Y' else False
|
m[field['lbl']] = True if m[field['lbl']] == 'Y' else False
|
||||||
|
|
||||||
c.executemany("REPLACE INTO labels (label, label_id) VALUES (%s, %s)",
|
c.executemany("""INSERT INTO labels (label, label_id) VALUES (%s, %s)
|
||||||
|
ON DUPLICATE KEY UPDATE
|
||||||
|
label=VALUES(label), label_id=VALUES(label_id);""",
|
||||||
membershipworks._parse_flags()['labels'].items())
|
membershipworks._parse_flags()['labels'].items())
|
||||||
|
|
||||||
insertFromTableMap('members', members, tableMapping['members'])
|
insertFromTableMap('members', members, tableMapping['members'])
|
||||||
|
Reference in New Issue
Block a user