【问题标题】:Why I can't connect my telegram bot to Mongodb Atlas using Python?为什么我无法使用 Python 将我的电报机器人连接到 Mongodb Atlas?
【发布时间】:2020-11-08 10:56:44
【问题描述】:

这是我的代码

from telegram.ext import Updater, CommandHandler
import os
from pymongo import MongoClient

TOKEN = 'TOKEN'

def get_db(update, context):
    cluster = MongoClient("mongodb+srv://testing:12345678@cluster0.gs9k5.mongodb.net/test?retryWrites=true&w=majority")
    result = list(cluster.get_database('DBNAME')['COLLECTIONNAME'].find({}))
    update.message.reply_text(str(result))

def main():
    updater = Updater(TOKEN, use_context=True)
    dp = updater.dispatcher

    dp.add_handler(CommandHandler("getdb", get_db))

    updater.start_webhook(listen="#.#.#.#",
                          port=int(PORT),
                          url_path=TOKEN)
    updater.bot.setWebhook('https://MYHEROKUAPP.herokuapp.com/' + TOKEN)

    updater.idle()


if __name__ == '__main__':
    main()

每次我输入/getdb,机器人都不给我任何回应。当我尝试了几个实验时,集群变量似乎有一些错误。我使用了 try except 语法,但机器人没有显示任何内容,即使是从 except 中,我也找不到错误名称。我正在使用 heroku 服务器作为电报机器人。如何解决这个问题?

【问题讨论】:

    标签: python heroku pymongo python-telegram-bot


    【解决方案1】:

    您可以连接到默认数据库(这是连接字符串中定义的数据库)并像这样查询集合

    client = MongoClient('connect-string')
    db = client.get_default_database()
    # 'collection_name' is the name of the Mongo collection
    list = db.collection_name.find()
    

    【讨论】:

    • 感谢您的回答,但您的代码和我的代码没有区别(尤其是集群变量和客户端变量相同)
    • 代码非常相似,不同之处在于使用get_default_database 和使用dict 键而不是get(),这提高了可读性并且不易出错(无需对数据库名称进行硬编码)。您是否在堆栈跟踪中获得了一些信息?你试过client .server_info吗?
    • 在您的问题中避免连接字符串和凭据也是一个好习惯
    • 我已经尝试过您的代码,但仍然没有任何响应。
    • 没有错误?只是没有回应?您是否将连接的 IP 地址列入白名单?我已经允许所有 (0.0.0.0/0 )
    猜你喜欢
    • 2022-01-07
    • 1970-01-01
    • 2019-12-24
    • 2011-01-21
    • 2015-02-21
    • 2021-06-25
    • 2020-02-22
    • 2020-07-25
    • 2019-10-31
    相关资源
    最近更新 更多