Ошибка добавление записи в таблицу через библиотеку asyncpg

Есть корутина, добавляющая в таблицу teachers, в которую входит только поле user_id, запись:

async def add_new_teacher(self, user_id :int):
    command = "INSERT INTO teachers(user_id) VALUES ($1) RETURNING id"
    args: tuple = (user_id)
    record_id = await self.pool.fetchval(command, *args)
    return record_id

Когда данный код отрабатывает, он выбрасывает ошибку:

Traceback (most recent call last):   File "/home/anton/dev/Bots/EnglishGitBot/dbheandler.py", line 49, in <module>
    loop.run_until_complete(asyncio.gather(data_base.add_new_teacher(1)))  File "/usr/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()   File "/home/anton/dev/Bots/EnglishGitBot/dbheandler.py", line 27, in add_new_teacher
    record_id = await self.pool.fetchval(command, *args) TypeError: fetchval() argument after * must be an iterable, not int

Почему данный код не работает?

Есть похожая функция, написанная по тому же шаблону и она работает без ошибок. Код работающей функции:

async def add_new_user(self, chat_id: int, username: str, full_name: str):
    command = "INSERT INTO users(chat_id, username, full_name) VALUES ($1, $2, $3) RETURNING id"
    args :tuple = (chat_id, username, full_name)
    record_id = await self.pool.fetchval(command, *args)
    return record_id

Ответы (1 шт):

Автор решения: MaxU

У вас классическая ошибка:

args: tuple = (user_id)

Здесь вы создали скалярную переменную args, а не кортеж.

Пример:

In [1]: user_id = 123

In [2]: args: tuple = (user_id)

In [3]: type(args)
Out[3]: int       #  <-------------- NOTE!!!

Для того чтобы создать кортеж, состоящий из единственного элемента, добавьте запятую после элемента:

In [5]: args: tuple = (user_id, )
#  NOTE: -------------------> ^

In [6]: type(args)
Out[6]: tuple  # <--------- NOTE!!!

PS запятую нужно добавлять только в том случае, когда создаем кортеж из одного элемента:

In [7]: args: tuple = (user_id, "a string")

In [8]: type(args)
Out[8]: tuple
→ Ссылка