我正在使用 telebot 库制作一个电报机器人。此函数从 SQL3 数据库中检索用户之前在 city_living 变量中选择的居住城市。
def get_city_living(user_id: int):
with sqlite3.connect('server.db') as conn:
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
user_id INTEGER PRIMARY KEY,
first_seen TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
city_living TEXT DEFAULT 'null'
)
''')
city = cursor.execute('SELECT city_living FROM users WHERE user_id=?', (user_id,)).fetchone()
return city[0]
if callback.data == 'profile':
user_id=callback.message.from_user.id
kb = types.InlineKeyboardMarkup(row_width=1)
item1 = types.InlineKeyboardButton(text='🔙 Назад в главное меню', callback_data='back1') #back to main menu
name = f'👤 Имя: {callback.from_user.first_name}'
buys = '\n📊 Совершено покупок: ' + str(buy)
cityl = '\n 🌍 Город: ' + get_city_living(user_id) #City:
kb.add(item1)
bot.edit_message_text(chat_id=callback.message.chat.id, message_id=callback.message.id, text=name+buys+cityl, reply_markup=kb)
第 129 行是
return city[0]
。为什么会出现这个错误?怎么解决?
File "<string>", line 492, in bot_message
File "<string>", line 129, in
get_city_living
TypeError: 'NoneType' object is not
subscriptable
要从数据库中检索一些数据,您应该先将数据插入到表中。如果表不存在,函数 get_city_living() 将创建该表并从该表中检索数据。但它不会向表中插入任何内容。我在这里没有看到任何其他代码可以做到这一点。
“用户”表中似乎没有条目,这就是该函数返回 None 的原因。