$ sqlite3
SQLite version 3.37.2 2022-01-06 13:25:41
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> CREATE TABLE user (
id INTEGER PRIMARY KEY,
username TEXT UNIQUE,
usertg TEXT UNIQUE,
name TEXT UNIQUE
);
sqlite> insert into user (name) values ('test');
sqlite> insert into user (name) values ('test');
Error: stepping, UNIQUE constraint failed: user.name (19)
sqlite> insert or ignore into user (name) values ('test');
sqlite> insert or ignore into user (name) values ('test');
sqlite> insert or ignore into user (name) values ('test');
sqlite> select count(*) from user;
1
sqlite>
$ sqlite3 bot.db
SQLite version 3.37.2 2022-01-06 13:25:41
Enter ".help" for usage hints.
sqlite> .schema files
CREATE TABLE files (
file_name TEXT VARCHAR(256) UNIQUE,
file_id TEXT VARCHAR(256)
);
sqlite>
Можно сделать [requests.get(...) for n in range(20)]. но получится список response. Но такие вещи обычно удобнее в цикле делать. Чтобы можно было сразу ответ обработать, ошибки отловить, возможно повторно запросы выполнить (например, по 5 попыток до полного отказа). В list coprehesion уже не засунешь дополнительной логики.
Кроме того, в таких API обычно неизвестно заранее число страниц, и необходимость следующей страницы определяется по данным предыдущей.