• Как восстановить базу данных PostgreSQL?

    ApXNTekToP
    @ApXNTekToP Автор вопроса
    Akina, база данных имеет кодировку UTF 8, все делается посредством pgAdmin 4.
    Т.е я скачал архив с сайта, вытащил от туда SQL файл. Далее зашел во вкладку restore в pgAdmin 4 и пытался восстановить базу данных demo. На этот момент у меня уже имелась БД demo, но она была пустая. Мне нужно её заполнить данными.
  • Не могли бы оценить мой код на Python?

    ApXNTekToP
    @ApXNTekToP Автор вопроса
    Дмитрий, Отлично замечание, спасибо.
  • Не могли бы оценить мой код на Python?

    ApXNTekToP
    @ApXNTekToP Автор вопроса
    Wispik, Вообще расчет был на то, что пользователь может написать вопрос без знака "?" или с ним. Хотя я уже осознаю что можно было с помощью патерна, искать только буквы, без всяких знаков. Учту на будущее. В ближайшее время займусь рефакторингом. Спасибо!
  • Недостатки PostgreSQL?

    ApXNTekToP
    @ApXNTekToP Автор вопроса
    Я вот как раз читал данную статью и вот у меня возникли сомнения в актуальности данных описанных в ней, все таки статья 2017 года. PostgreSQL пережил, множество обновлений с того времени.
  • Недостатки PostgreSQL?

    ApXNTekToP
    @ApXNTekToP Автор вопроса
    Владислав Лысков, Я выделил для себя такие особенности PostgreSQL

    1. Модель данных – PostgreSQL не просто реляционная, а объектно-реляционная СУБД. Это даёт ему некоторые преимущества над другими SQL базами данных с открытым исходным кодом, такими как MySQL, MariaDB и Firebird. Фундаментальная характеристика объектно-реляционной базы данных – это поддержка пользовательских объектов и их поведения, включая типы данных, функции, операции, домены и индексы. Это делает PostgreSQL невероятно гибким и надежным. Среди прочего, он умеет создавать, хранить и извлекать сложные структуры данных.
    2. Структуры и типы данных – cуществует обширный список типов данных, которые поддерживает PostgreSQL. Кроме числовых, с плавающей точкой, текстовых, булевых и других ожидаемых типов данных (а также множества их вариаций), PostgreSQL может похвастаться поддержкой uuid, денежного, перечисляемого, геометрического, бинарного типов, сетевых адресов, битовых строк, текстового поиска, xml, json, массивов, композитных типов и диапазонов, а также некоторых внутренних типов для идентификации объектов и местоположения логов.

    3. Многомерные массивы – поскольку PostgreSQL это объектно-реляционная база данных, массивы значений могут храниться для большинства существующих типов данных. Сделать это можно путём добавления квадратных скобок к спецификации типа данных для столбца или с помощью выражения ARRAY. Размер массива может быть задан, но это необязательно;
    4. Поддержка JSON – в PostgreSQL позволяет вам перейти к хранению schema-less данных в SQL базе данных. Это может быть полезно, когда структура данных требует определённой гибкости: например, если в процессе разработки структура всё ещё меняется или неизвестно, какие поля будет содержать объект данных;
    5. Целостность данных – PostgreSQL стремится соответствовать стандарту ANSI-SQL:2008, отвечает требованиям ACID (атомарность, согласованность, изолированность и надежность) и известен своей ссылочной и транзакционной целостностью. Первичные ключи, ограничивающие и каскадные внешние ключи, уникальные ограничения, ограничения NOT NULL, проверочные ограничения и другие функции обеспечения целостности данных дают уверенность, что только корректные данные будут сохранены.
  • Создание карусели Telegram Bot?

    ApXNTekToP
    @ApXNTekToP Автор вопроса
    Михаил, Все отлично работает, спасибо вам еще раз!
  • Создание карусели Telegram Bot?

    ApXNTekToP
    @ApXNTekToP Автор вопроса
    Михаил, Хмм, такой вариант мне в голову не приходил. Попробую реализовать! Спасибо!
  • Создание карусели Telegram Bot?

    ApXNTekToP
    @ApXNTekToP Автор вопроса
    Михаил, Код имеется
    def display_cart(self): # self это message
            try:
                global cart
                global counter
                counter = 0
    
                connection = db.create_connection(
                    "merch_telegram_bot_db", "postgres", "password",
                    "127.0.0.1",
                    "5432"
                )
                query = q.interface_query[
                            'display_product_cart'] + str(self.from_user.id)
                cart = db.execution_of_requests(connection, query)
                connection.close()
                cart_keyboard = key.cart_keyboard()
                bot.send_message(self.chat.id, "Корзина:\n")
                bot.send_message(self.chat.id, f"{cart[0][0]}\n"
                                               f"{cart[0][1]}\n"
                                               f"<a href='{cart[0][2]}'>&#8203"
                                               f";</a>",
                                 parse_mode="HTML",
                                 reply_markup=cart_keyboard)
    
            except Exception as e:
                print('Фатальная ошибка!' + f'\n{str(e)}')
                return
    
        def callback_data_handler(self): # self это call (ответ inline кнопок)
            try:
                connection = db.create_connection(
                    "merch_telegram_bot_db", "postgres", "password", "127.0.0.1",
                    "5432"
                )
                id_element = extract_id(self.data)
                if id_element[0] == 'cat':
                    query = q.interface_query['product'] + id_element[1]
                    product = db.execution_of_requests(connection, query)
                    bot.edit_message_text(chat_id=self.message.chat.id,
                                          message_id=self.message.message_id,
                                          text=f'{product[0][0]}')
                    for i in product:
                        show_product_keyboard = key.show_product(i)
                        bot.send_photo(self.from_user.id, i[5],
                                       caption=f'\n{i[2]}\n{i[3]}',
                                       reply_markup=show_product_keyboard)
                    bot.answer_callback_query(self.id, show_alert=False)
                elif id_element[0] == 'prod':
                    query = q.interface_query['cart_id_info'] + \
                            str(self.from_user.id)
                    cart_id = db.execution_of_requests(connection, query)
                    query = q.interface_query['add_product_cart']
                    data = (cart_id[0][0], id_element[1])
                    db.execution_of_requests(connection, query, data)
                    InterfaceInteraction.alert(self, "Товар добавлен в корзину")
                elif id_element[0] == 'delete':
                    print("Ok_delete")
                    InterfaceInteraction.alert(self)
                elif id_element[0] == 'remove':
                    print("Ok_remove")
                    InterfaceInteraction.alert(self)
                elif id_element[0] == 'add':
                    print("Ok_add")
                    InterfaceInteraction.alert(self)
                elif id_element[0] == 'previous':
                    print(self)
                    InterfaceInteraction.alert(self)
                elif id_element[0] == 'next':
                    print(cart)
                    InterfaceInteraction.alert(self)
                elif id_element[0] == 'order':
                    print("Ok_order")
                    InterfaceInteraction.alert(self)
                elif id_element[0] == 'continue':
                    print("Ok_continue")
                    InterfaceInteraction.alert(self)
                else:
                    InterfaceInteraction.alert(self)
                connection.close()
            except Exception as e:
                print('Фатальная ошибка!' + f'\n{str(e)}')
                return
  • Создание карусели Telegram Bot?

    ApXNTekToP
    @ApXNTekToP Автор вопроса
    Михаил, Да, затуп происходит на стадии, когда я получают callback от кнопки сообщения, такого формата:
    {'game_short_name': None, 'chat_instance': '7500270613924840228', 'id': '2134263021074103949', 'from_user': {'id': 496921832, 'is_bot': False, 'first_name': 'ApXNTekToP', 'username': 'ApXNNTekToP', 'last_name': None, 'language_code': 'ru', 'can_join_groups': None, 'can_read_all_group_messages': None, 'supports_inline_queries': None}, 'message': {'content_type': 'text', 'id': 6832, 'message_id': 6832, 'from_user': , 'date': 1623057088, 'chat': , 'forward_from': None, 'forward_from_chat': None, 'forward_from_message_id': None, 'forward_signature': None, 'forward_sender_name': None, 'forward_date': None, 'reply_to_message': None, 'edit_date': None, 'media_group_id': None, 'author_signature': None, 'text': 'Средняя бомба\nОписание: Средняя бомба\n\u200b', 'entities': [], 'caption_entities': None, 'audio': None, 'document': None, 'photo': None, 'sticker': None, 'video': None, 'video_note': None, 'voice': None, 'caption': None, 'contact': None, 'location': None, 'venue': None, 'animation': None, 'dice': None, 'new_chat_member': None, 'new_chat_members': None, 'left_chat_member': None, 'new_chat_title': None, 'new_chat_photo': None, 'delete_chat_photo': None, 'group_chat_created': None, 'supergroup_chat_created': None, 'channel_chat_created': None, 'migrate_to_chat_id': None, 'migrate_from_chat_id': None, 'pinned_message': None, 'invoice': None, 'successful_payment': None, 'connected_website': None, 'reply_markup': , 'json': {'message_id': 6832, 'from': {'id': 1614577997, 'is_bot': True, 'first_name': 'merchantTelegramBot', 'username': 'testmerchant_bot'}, 'chat': {'id': 496921832, 'first_name': 'ApXNTekToP', 'username': 'ApXNNTekToP', 'type': 'private'}, 'date': 1623057088, 'text': 'Средняя бомба\nОписание: Средняя бомба\n\u200b', 'entities': [{'offset': 38, 'length': 1, 'type': 'text_link', 'url': 'https://image.freepik.com/free-vector/round-black-...'}], 'reply_markup': {'inline_keyboard': [[{'text': '❌', 'callback_data': 'delete'}, {'text': '⬇', 'callback_data': 'remove'}, {'text': 'quantity', 'callback_data': 'quantity'}, {'text': '⬆', 'callback_data': 'add'}], [{'text': '⬅', 'callback_data': 'previous'}, {'text': 'quantity_product', 'callback_data': 'quantity'}, {'text': '➡', 'callback_data': 'next'}], [{'text': '✅ Заказ на 0 рупий, Оформить?', 'callback_data': 'order'}], [{'text': 'Продолжить покупки', 'callback_data': 'continue'}]]}}}, 'data': 'next', 'inline_message_id': None}
    Мне с помощью этих данных нужно идентифицировать товар в списке:
    [('Средняя бомба', 'Описание: Средняя бомба', 'https://image.freepik.com/free-vector/round-black-...'), ('Зелье водного дыхания', 'Описание: Зелье водного дыхания', 'https://static.wikia.nocookie.net/elderscrolls/ima...'), ('Жир тролля', 'Описание: Жир тролля', 'https://static.wikia.nocookie.net/elderscrolls/ima...'), ('Вересковое сердце', 'Описание: Вересковое сердце', 'https://static.wikia.nocookie.net/elderscrolls/ima...'), ('Медвежьи когти', 'Описание: Медвежьи когти', 'https://static.wikia.nocookie.net/elderscrolls/ima...'), ('Ваббаджек', 'Описание: Ваббаджек', 'https://static.wikia.nocookie.net/elderscrolls/ima...'), ('Волендранг', 'Описание: Волендранг', 'https://static.wikia.nocookie.net/elderscrolls/ima...'), ('Роза Сангвина', 'Описание: Роза Сангвина', 'https://static.wikia.nocookie.net/elderscrolls/ima...'), ('Огма Инфиниум', 'Описание:Огма Инфиниум', 'https://static.wikia.nocookie.net/elderscrolls/ima...'), ('Масло 1 L', 'Описание: Масло 1 L', 'https://static.wikia.nocookie.net/amnesia/images/6...'), ('Большая бомба', 'Описание: Большая бомба', 'https://media.sketchfab.com/models/dacf9850fc6b4a0...'), ('Беспрестанная отрава упадка сил', 'Описание: Беспрестанная отрава упадка сил', 'https://static.wikia.nocookie.net/elderscrolls/ima...'), ('Беспрестанная отрава упадка сил', 'Описание: Беспрестанная отрава упадка сил', 'https://static.wikia.nocookie.net/elderscrolls/ima...'), ('Беспрестанная отрава упадка сил', 'Описание: Беспрестанная отрава упадка сил', 'https://static.wikia.nocookie.net/elderscrolls/ima...'), ('Беспрестанная отрава упадка сил', 'Описание: Беспрестанная отрава упадка сил', 'https://static.wikia.nocookie.net/elderscrolls/ima...'), ('Беспрестанная отрава упадка сил', 'Описание: Беспрестанная отрава упадка сил', 'https://static.wikia.nocookie.net/elderscrolls/ima...'), ('Беспрестанная отрава упадка сил', 'Описание: Беспрестанная отрава упадка сил', 'https://static.wikia.nocookie.net/elderscrolls/ima...')]
    Список товаров бот получает из базы данных, возможность поменять формат получаемого списка есть. Выводимые данные формирую я.
  • Создание карусели Telegram Bot?

    ApXNTekToP
    @ApXNTekToP Автор вопроса
    Мне тут алгоритм интересен, редактирую сообщение я методом edit_message_text в библиотеке telebot.
    Я не совсем понимаю как заставить программу проходится по списку, и в зависимости от элемента в списке, редактировать сообщение.
    На данный момент у меня есть ID сообщения который высылает бот, проблема состоит в идентификации элемента товара в высланном сообщении, для последующего изменения сообщения.
    Т.е бот отправляет первый товар из списка, мне от этого товара приходит определенный callback, и мне нужно как то обработать этот callback, что бы вывелся следующий товар в списке.
  • Как парсить ответ cURL PHP?

    ApXNTekToP
    @ApXNTekToP Автор вопроса
    Спасибо!
  • Как заставить скрипт JS работать в выбранном блоке?

    ApXNTekToP
    @ApXNTekToP Автор вопроса
    Alex, Спасибо за помощь, проблему решил!
  • Как заставить скрипт JS работать в выбранном блоке?

    ApXNTekToP
    @ApXNTekToP Автор вопроса
    Alex, Ну я использую ключевое слово this, оно возвращает span, никакого блока родителя в параметрах, я не увидел. Может у вас есть пример скрипта, как подобное реализуется.
  • Как заставить скрипт JS работать в выбранном блоке?

    ApXNTekToP
    @ApXNTekToP Автор вопроса
    Alex, а как можно будет определить, в каком контейнере произошло событие клик?
  • Как заставить скрипт JS работать в выбранном блоке?

    ApXNTekToP
    @ApXNTekToP Автор вопроса
    Т.е мне мой скрипт, для каждого popup прописывать? При этом выполняя поиск элементов, по выбранному селлектору?
  • Как отправить сообщение для отдельного пользователя через определенный промежуток времени?

    ApXNTekToP
    @ApXNTekToP Автор вопроса
    Александр, Спасибо большое! Я передал чутка ваш, код и все стабильно вроде как работает. Если бы не вы, я бы не узнал, что такое многопоточное программирование) Еще раз спасибо!
  • Как выводить данные из бд, в нужном для меня формате?

    ApXNTekToP
    @ApXNTekToP Автор вопроса
    Dr. Bacon, ну если это поможет мне избавится от запятой, то запросто. Это же поможет мне избавится от запятой?
  • Как выводить данные из бд, в нужном для меня формате?

    ApXNTekToP
    @ApXNTekToP Автор вопроса
    Т.е когда я отправлю сообщение из бд вставляется (user_id,) и у меня в bot.send_message выходит 2 запятые, api телеграмма подобное не ест.
    bot.send_message(user_id[0],"Текст")
  • Как выводить данные из бд, в нужном для меня формате?

    ApXNTekToP
    @ApXNTekToP Автор вопроса
    если из бд брать user_id[0], то в переменную запишется user_id и ненужная запятая на конце, (user_id,) которая ломает всю программу. Мне нужно убрать только запятую.