Тг бот на python должен был брать данные клиента с бд(psql) но почему то он ищет несуществующий user id хотя в бд только 1 пользователь с другим id в pgAdmin4 проверял сохранились ли данные но все равно бот не види пользоваателя в бд. Вот логгинг

а вот сам код(не весь)
def register_user(user_id, first_name, last_name, phone, address):
try:
cur.execute("""
INSERT INTO users (user_id, first_name, last_name, phone, address)
VALUES (%s, %s, %s, %s, %s)
ON CONFLICT (user_id) DO UPDATE
SET first_name = EXCLUDED.first_name,
last_name = EXCLUDED.last_name,
phone = EXCLUDED.phone,
address = EXCLUDED.address;
""", (user_id, first_name, last_name, phone, address))
conn.commit() # <== БЕЗ ЭТОГО МОЖЕТ НЕ РАБОТАТЬ
logging.info(f"✅ Пользователь {user_id} зарегистрирован!")
except Exception as e:
conn.rollback() # ОТКАТ, если ошибка
logging.error(f"❌ Ошибка при регистрации пользователя: {e}")
# Функция для получения данных пользователя
def get_user_data(user_id):
"""Получает данные пользователя по его Telegram ID."""
try:
conn.commit() # Обновим данные перед запросом
print(f" Ищем пользователя с ID: {user_id}") # Вывод перед запросомprint(f" Ищем в БД пользователя с ID: {user_id}")
cur.execute("SELECT first_name, last_name, phone, address FROM users WHERE user_id = %s", (user_id,))
user = cur.fetchone()
print(f" Найден пользователь: {user}") # Что вернулось из базы?
return user if user else None
except Exception as e:
logging.error(f"Ошибка при получении данных пользователя: {e}")
return None
# Хранилище данных пользователей (user_id -> данные)
user_data = {}
# Определяем состояния
class OrderState(StatesGroup):
choosing_delivery = State()
choosing_category = State()
choosing_drink = State()
choosing_volume = State()
choosing_quantity = State()
entering_custom_quantity = State()
entering_customer_info = State()
entering_first_name = State()
entering_last_name = State()
entering_phone = State()
entering_address = State()
# Главное меню
@dp.message_handler(commands=['start'])
async def start_command(message: types.Message):
keyboard = ReplyKeyboardMarkup(resize_keyboard=True)
keyboard.add(KeyboardButton(" Заказать напиток"))
keyboard.add(KeyboardButton(" Регистрация"))
await message.answer("Привет! Добро пожаловать в наш бот-бар! \nНажмите кнопку ниже, чтобы сделать заказ или зарегистрироваться.", reply_markup=keyboard)
print(message.from_user.id) # Ошибка! message не определён
# Регистрация
@dp.message_handler(lambda message: message.text == " Регистрация")
async def registration(message: types.Message):
await message.answer("Введите ваше Имя:")
await OrderState.entering_first_name.set()
@dp.message_handler(state=OrderState.entering_first_name)
async def process_first_name(message: types.Message, state: FSMContext):
await state.update_data(first_name=message.text)
await message.answer("Введите вашу Фамилию:")
await OrderState.entering_last_name.set()
@dp.message_handler(state=OrderState.entering_last_name)
async def process_last_name(message: types.Message, state: FSMContext):
await state.update_data(last_name=message.text)
await message.answer("Введите ваш Телефон (с кодом страны):")
await OrderState.entering_phone.set()
@dp.message_handler(state=OrderState.entering_phone)
async def process_phone(message: types.Message, state: FSMContext):
await state.update_data(phone=message.text)
await message.answer("Введите ваш Адрес доставки:")
await OrderState.entering_address.set()
@dp.message_handler(state=OrderState.entering_address)
async def process_address(message: types.Message, state: FSMContext):
await state.update_data(address=message.text)
user_id = message.from_user.id
data = await state.get_data()
first_name = data['first_name']
last_name = data['last_name']
phone = data['phone']
address = data['address']
try:
conn = psycopg2.connect(
dbname=",#Тут мое название бд
user="postgres",
password="",#тут мой пароль
host="localhost", # или IP вашего сервера
port="5432"
)
cur = conn.cursor()
cur.execute("""
INSERT INTO users (user_id, first_name, last_name, phone, address)
VALUES (%s, %s, %s, %s, %s)
ON CONFLICT (user_id) DO UPDATE
SET first_name = EXCLUDED.first_name,
last_name = EXCLUDED.last_name,
phone = EXCLUDED.phone,
address = EXCLUDED.address
""", (user_id, first_name, last_name, phone, address))
conn.commit()
logging.info(f"✅ Данные сохранены: {user_id}, {first_name} {last_name}, {phone}, {address}")
await message.answer("✅ Ваши данные успешно сохранены!")
except Exception as e:
logging.error(f"❌ Ошибка при сохранении данных: {e}")
await message.answer("❌ Произошла ошибка при сохранении ваших данных. Попробуйте еще раз.")
await state.finish()
# Запрос данных пользователя
@dp.message_handler(state=OrderState.entering_customer_info)
async def register_customer(message: types.Message, state: FSMContext):
user_data = message.text.split(", ")
if len(user_data) == 3:
first_name,last_name, phone, address = user_data
user_id = message.from_user.id
# Регистрация пользователя
register_user(user_id, first_name,last_name, phone, address)
await message.answer(f"Спасибо за регистрацию! Ваши данные сохранены:\nИмя: {first_name}\nФамилия: {last_name}\nТелефон: {phone}\nАдрес: {address}")
await start_command(message) # Возвращаем к главному меню
else:
await message.answer("Ошибка: пожалуйста, введите данные в формате:\nИмя, Телефон, Адрес")
# Отправка данных заказа
async def send_order(message, state):
data = await state.get_data()
drink = data["drink"]
volume = data["volume"]
quantity = data["quantity"]
price = data["price"]
delivery_type = data["delivery_type"]
user_id = message.from_user.id
user_data = get_user_data(user_id)
if user_data:
first_name, last_name, phone, address = user_data
await message.answer(
f"✅ Ваш заказ принят!\n\n"
f" Напиток: {drink}\n"
f" Объем: {volume} мл\n"
f" Количество: {quantity}\n"
f" Цена: {int(price) * int(quantity)}₽\n"
f" Доставка: {delivery_type}\n\n"
f" Ваши данные:\n"
f"Имя: {first_name} {last_name}\n"
f" Телефон: {phone}\n"
f" Адрес: {address}"
)
# Отправляем заказ в канал
await bot.send_message(
CHANNEL_ID,
f" *Новый заказ!*\n\n"
f" Напиток: {drink}\n"
f" Объем: {volume} мл\n"
f" Количество: {quantity}\n"
f" Цена: {int(price) * int(quantity)}₽\n"
f" Доставка: {delivery_type}\n\n"
f" *Клиент:* {first_name} {last_name}\n"
f" Телефон: {phone}\n"
f" Адрес: {address}",
parse_mode="Markdown"
)
await state.finish()
else:
await message.answer("❌ Ошибка: ваши данные не найдены в базе. Пожалуйста, зарегистрируйтесь через /start.")
# Запуск бота
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
Помогите найти проблему,пытался у гпт спросить не дал норм ответа