Прежде всего, не используйте оператор% для построения вашего SQL. Вместо этого передайте ваш кортеж аргументов в качестве второго параметра в cursor.execute
, что также отменяет необходимость заключать ваш аргумент в кавычки и позволяет использовать% s для всего:
cursor.execute("UPDATE jiveuser SET username = %s WHERE userid = %s", (newName, userId))
Это важно для предотвращения атак SQL-инъекций .
Чтобы ответить на ваш вопрос, вы можете ускорить эти обновления, создав индекс для столбца userid
, который позволит базе данных обновляться за O(1)
постоянное время, а не сканировать всю таблицу базы данных, которая O(n)
. Поскольку вы используете PostgreSQL, вот синтаксис для создания индекса:
CREATE INDEX username_lookup ON jiveuser (userid);
РЕДАКТИРОВАТЬ: так как ваш комментарий показывает, что у вас уже есть индекс в столбце userid
, вы не могли бы сделать что-либо, чтобы ускорить этот запрос. Таким образом, ваш основной выбор - либо жить с медлительностью, так как это звучит как единовременное исправление, либо следовать совету VeeArr
и проверить, даст ли cursor.executemany достаточное ускорение.