Ошибка с sqlite3 python

Начал работать с телеграмм ботом и sqlite3 на питоне и стокнулся с проблемой. Есть кусок кода:

def first_join(user_id, name, code, balance, firstname, lastname):
    conn = sqlite3.connect('base_ts.sqlite')
    cursor = conn.cursor()
    row = cursor.execute(f'SELECT * FROM users WHERE user_id = "{user_id}"').fetchall()

    if len(row) == 0:
        cursor.execute(f'INSERT INTO users VALUES("{user_id}", "{name}", "{datetime.datetime.now()}", "{balance}", "{firstname}, "{lastname}")')
        conn.commit()

Он срабатывает когда юзер первый раз присоединяется к телеграмм боту, вот кстати дополнение кода:

@bot.message_handler(commands=['start'])
    def start(message):                     
        chat_id = message.chat.id
        func.first_join(user_id=chat_id, name=message.from_user.username, code=message.text[6:], balance=300, firstname=message.from_user.first_name,lastname=message.from_user.last_name)

Вот эти вот параметры:

message.from_user.id

message.from_user.first_name

message.from_user.last_name

message.from_user.username

Принадлежат модулю Telebot (api Telegram) с помощью которого можно получить разные параметры о человеке.

Моя проблема заключается в том что, при присоединение человека, срабатывает такая вот ошибка:

cursor.execute(f'INSERT INTO users VALUES("{user_id}", "{name}", "{datetime.datetime.now()}", "{balance}", "{firstname}, "{lastname}")')
sqlite3.OperationalError: near "None": syntax error

Я думаю что эта ошибка из-за того что у юзера нет фамилии и поэтому программа останавливается. Так как недавно начал изучать sqlite3 не разобрался что нужно делать, но опять же, это мое предположение. Что думаете?


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

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

Ответом будет вот такой вариант записи:

cursor.execute(f'INSERT INTO users VALUES("{user_id}", "{name}", "{datetime.datetime.now()}", "{balance}", "{firstname}", "{lastname if not lastname is None else ""}")')

Спасибо - @cauf

→ Ссылка
Автор решения: biflé

В любом случае, лучше не делать это интерпояцией. В sqlite3 это можно реализовать намного удобнее и элегантнее.

cursor.execute(
    'INSERT INTO users VALUES(?,?,?,?,?,?)',
    (
        message.from_user.id,
        message.from_user.username,
        datetime.datetime.now(),
        balance, 
        message.from_user.first_name,
        message.from_user.last_name,
    ),
)

А ошибка скорее всего из-за того, что в sqlite3 нет слова None - вместо него - NULL

→ Ссылка