为什么我无法使用 Python 将我的电报机器人连接到 Mongodb Atlas?
Why I can't connect my telegram bot to Mongodb Atlas using Python?
这是我的代码
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 服务器。如何解决这个问题?
您可以连接到默认数据库(这是在连接字符串中定义的数据库)并像这样查询集合
client = MongoClient('connect-string')
db = client.get_default_database()
# 'collection_name' is the name of the Mongo collection
list = db.collection_name.find()
我不确定你是否还有这个问题,但到目前为止代码似乎没问题。
尝试将应用信息记录到终端以更好地了解错误是什么。
import logging
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.INFO)
logger = logging.getLogger(__name__)
- 可能是您的 MongoDB Atlas 不允许来自您 运行 您的代码所在的服务器的连接。您可以检查您的集群以查看它是否允许从您的服务器访问数据库。您可以将您服务器的IP地址添加到集群中,让它成功访问数据。
- 如果您尝试显示其中所有项目的集合很大,Telegram 将抛出错误,因为随后的消息太长。确保您 运行 测试数据库中只有少数项目。
- 您应该可以检查您的 heroku 日志或在您的终端中查看可能发生的其他错误
这是我的代码
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 服务器。如何解决这个问题?
您可以连接到默认数据库(这是在连接字符串中定义的数据库)并像这样查询集合
client = MongoClient('connect-string')
db = client.get_default_database()
# 'collection_name' is the name of the Mongo collection
list = db.collection_name.find()
我不确定你是否还有这个问题,但到目前为止代码似乎没问题。 尝试将应用信息记录到终端以更好地了解错误是什么。
import logging
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.INFO)
logger = logging.getLogger(__name__)
- 可能是您的 MongoDB Atlas 不允许来自您 运行 您的代码所在的服务器的连接。您可以检查您的集群以查看它是否允许从您的服务器访问数据库。您可以将您服务器的IP地址添加到集群中,让它成功访问数据。
- 如果您尝试显示其中所有项目的集合很大,Telegram 将抛出错误,因为随后的消息太长。确保您 运行 测试数据库中只有少数项目。
- 您应该可以检查您的 heroku 日志或在您的终端中查看可能发生的其他错误