• Как получить(вернуть) значение переменной из функции в python 3?

    Sly_tom_cat
    @Sly_tom_cat
    .
    Есть три варианта:
    1. Использовать глобальную переменную
    def fun():
      global i
      while i < 3:
        i=i+1
        print (i)
    
    i = 0
    fun()
    print (i)

    2. Вернуть тербуемое значение как значение функции и присвоить в переменную которая передана
    def fun(i):
      while i < 3:
        i=i+1
        print (i)
      return i
    
    i = 0
    i = fun(i)
    print (i)

    3. Вернуть значение в списке переданном как параметр
    def fun(i):
      while i[0] < 3:
        i[0]=i[0]+1
        print (i[0])
    
    i = [0]
    fun(i)
    print (i[0])


    Первый вариант - не слишком хорош т.к. глобальных переменных в большой программе может быть очень много и это приводит к сложностям сопровождения кода программы.

    Второй вариант - довольно удобен, но нужно не забывать присваивать значение возвращаемое из функции.

    Третий вариант - вообще экзотика, но и он иногда бывает востребован, особенно в рекурсиях или при работе с потоками (когда из потока хочется получить результат).
    Ответ написан
    Комментировать
  • Как проверить наличие значения в базе данных?

    @iddqda
    network engineer, netdevops
    if cur.fetchone() is None:

    Но вообще можно сразу эту логику прописать в запросе
    Гугли sql insert if not exist
    Для разных рмдб рецепт может отличаться. К примеру в SQLite есть конструкция insert or ignore

    З.Ы. Написал ответ, а потом только прочитал вопрос. Ну пусть будет. Хотя предыдущие ответы подходят лучше конечно
    Ответ написан
    Комментировать
  • Как проверить наличие значения в базе данных?

    @anerev
    Нужно таблицу переделать, оно так будет ошибку выдавать если запись уже в БД
    CREATE TABLE users(
        user_id integer,
        user_log varchar(256),
        UNIQUE (user_id, user_log)
    );

    https://postgrespro.ru/docs/postgresql/9.5/ddl-con...
    Ответ написан
    Комментировать
  • Как проверить наличие значения в базе данных?

    shabelski89
    @shabelski89
    engineer
    При создании таблицы сделать поле user_id PRIMARY KEY.

    with db.connect(db) as connection:
        cursor = connection.cursor()
        cursor.execute('''CREATE TABLE USERS (
                                                      user_id TEXT PRIMARY key,
                                                      username TEXT,
                                                      first_name TEXT,
                                                      last_name TEXT);'''


    def add_user_info(user):
        with db.connect(db) as connection:
            cursor = connection.cursor()
            try:
                cursor.execute('''INSERT INTO USERS (user_id, username, first_name, last_name) 
                VALUES(?,?,?,?);''', user)
            except Error:
                pass
    Ответ написан
    Комментировать
  • Какую базу данных использовать для телеграмм-бота?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Всё зависит от того, какие задачи будут у вашего бота, какая будет у него архитектура, насколько сложные модели данных, собираетесь ли использовать ORM и какой именно.
    А может быть вам реляционная структура БД и вовсе не нужна и больше подойдёт NoSQL база данных.
    там их великое множество с разными возможностями и ограничениями от простых хранилищ ключ-значение, до развесистых и навороченных.

    Я бы порекомендовал MongoDB.
    Для питона есть огромное количество примеров и тьюториалов типа такого. Куда уж понятнее.

    С Монгой вы избежите необходимости возиться со схемой БД, можно избежать специфического процесса инициализации базы, создания ее структуры.
    Если данные, которыми будет оперировать ваш бот разнообразны, то неплохая идея написать модели в виде обычных питоновских классов, сделать методы сериализации (сохранения) в БД и десериалиации (загрузки) и забыть о базе как о какой-то отдельной сущности. Можно сконцентрироваться на логике работы.

    Вообще не очень понятна мотивация вашего вопроса. Сейчас полно простых доступных материалов по этой теме, в том числе на русском языке. А как выбрать какую БД использовать я вам уже описал. Для более детального совета не хватает информации о то, чем будет заниматься ваш бот.

    P.S.
    Прошу прощения за капитанские ссылки в тексте, но каков вопрос, таков и ответ.

    P.P.S.
    Должен признать, что я довольно предвзят в пользу монги. Скорее всего вам подойдёт всё что угодно.
    Меньше всего потребует настройки и знания, видимо, sqlite. Это embedded база данных, она заточена для простого использования. Однако если вам вдруг понадобится запускать несколько инстансов вашего бота, которые будут работать с одной БД, то посмотрите всё же в сторону MongoDB или Postgres. Mysql стал сдавать позиции и нет особых причин не использовать postgres, если вам нужна именно реляционная БД.
    Ответ написан
    Комментировать
  • Как определить message_id, зная id канала и текст сообщения?

    Ninazu
    @Ninazu
    Определить message_id можно но не с 100% вероятностью. Так как сообщение может дублироваться в канале. Для этого нужно подключиться к каналу и подгрузить его историю. Например с помощью MTProto

    При публикации в канал, метод возвращает message_id в ответе))

    Но самый простой и правильный способ, это переслать сообщение из канала боту. Тогда точно в запросе прилетит его айдишник
    Ответ написан
    3 комментария