Потому что происходит попытка добавить пользователя с `user_id`, который уже существует.
В таблице уже есть пользователь с таким `user_id`, и БД выдает ошибку об этом, т.к. стоит ограничение о том, что `user_id` должен быть уникальным, без дублей.
Добавьте AUTOINCREMENT для `user_id` в таблице и не указывайте `user_id` при добавлении нового пользователя. В таком случае БД будет сама выставлять числовой идентификатор для новых юзеров.
Другой вариант - это использовать
uuid4 или ему подобные для генерации случайного идентификатора на стороне приложения.
Предлагаю почитать:
https://metanit.com/sql/sqlite/2.3.php
В случае, если данные юзеров, в т.ч. и идентификаторы, приходят из одного внешнего источника (например из телеграма) и нужно опираться на них, то необходимо проверять наличие юзера в таблице по `user_id`. Если такого юзера нет - добавлять, если уже есть - обновлять.
Также можно поступить проще:
INSERT ON CONFLICT DO.
-- если пользователь уже существует, то просто игнорировать
INSERT INTO 'users' (user_id) VALUES (?) ON CONFLICT(user_id) DO NOTHING
-- если пользователь уже существует, то обновить ему `referrer_id`
INSERT INTO 'users' (user_id, referrer_id) VALUES (?, ?)
ON CONFLICT(user_id) DO UPDATE SET referrer_id = excluded.referrer_id