Ошибка с 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 шт):
Ответом будет вот такой вариант записи:
cursor.execute(f'INSERT INTO users VALUES("{user_id}", "{name}", "{datetime.datetime.now()}", "{balance}", "{firstname}", "{lastname if not lastname is None else ""}")')
Спасибо - @cauf
В любом случае, лучше не делать это интерпояцией. В 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