user_id 在函数调用后取值 None(telebot、sqlite3)

问题描述 投票:0回答:1

我正在使用 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
python telegram telegram-bot telebot sqlite3-python
1个回答
0
投票

要从数据库中检索一些数据,您应该先将数据插入到表中。如果表不存在,函数 get_city_living() 将创建该表并从该表中检索数据。但它不会向表中插入任何内容。我在这里没有看到任何其他代码可以做到这一点。

“用户”表中似乎没有条目,这就是该函数返回 None 的原因。

© www.soinside.com 2019 - 2024. All rights reserved.