Я делаю инсерт в базу, в текстовое поле.
например cursor.execute('insert into table values ({},{},{});'.format(*pols))
поле, куда записывается first_name - текстовое
если взять просто message.from_user.first_name, постгре его не запишет, потому, что скажет, что это не текст
приходится брать конкатенацию
может, есть решение лучше, но у меня пока нет.
и после конкатенации пулять в массив, который потом ложится в инсерт
Во-первых, прочитайте про правильную подстановку пользовательских данных в запрос (во избежании sql-injection
)
Во-вторых, first_name - это либо str, либо NoneType и это нормально - у юзера может не быть имени.
В-третьих, в table поле, куда записывается first_name должно быть nullable, то есть иметь возможность быть пустым.
В-четвёртых, пишите бизнес-логику в отдельном модуле (файле): вся работа с бд (вставка, обновление, вывод из бд) должна быть, например, в файле services.py
, а уже в хендлере вызывать просто services.create_user(msg.from_user)
, где create_user это функция, которая записывает юзера в таблицу.