diff --git a/changelog.d/17814.bugfix b/changelog.d/17814.bugfix
new file mode 100644
index 0000000000000000000000000000000000000000..5dd276709b0be266c5eb1cd9feb5c6b107e29b8c
--- /dev/null
+++ b/changelog.d/17814.bugfix
@@ -0,0 +1 @@
+Avoid lost data on some database query retries.
diff --git a/synapse/storage/databases/main/devices.py b/synapse/storage/databases/main/devices.py
index a83df4075a39c609e41fe5421a45f549d15358b9..808894325313fbdf407357f3c500789d55e83360 100644
--- a/synapse/storage/databases/main/devices.py
+++ b/synapse/storage/databases/main/devices.py
@@ -1422,7 +1422,7 @@ class DeviceWorkerStore(RoomMemberWorkerStore, EndToEndKeyWorkerStore):
                 DELETE FROM device_lists_outbound_last_success
                 WHERE destination = ? AND user_id = ?
             """
-            txn.execute_batch(sql, ((row[0], row[1]) for row in rows))
+            txn.execute_batch(sql, [(row[0], row[1]) for row in rows])
 
             logger.info("Pruned %d device list outbound pokes", count)