【问题标题】:Connecting Flask with MySQL and MongoDB simultaneouslyFlask 与 MySQL 和 MongoDB 同时连接
【发布时间】:2020-11-23 10:41:54
【问题描述】:

我有一个 Flask 后端,我正在尝试同时将 MySQL 连接到 MongoDb。但是,我经常遇到这个错误。 我也在使用在 db 文件中实例化的 sqlalchemy。对 MySQL 服务器的请求很好,但是对 mongodb 的请求返回给我以下错误:

MongoDB 目前托管在 EC2 上,而我的烧瓶应用程序是本地的。

pymongo.errors.ServerSelectionTimeoutError:

app.py:

from flask import Flask
from flask_restful import Api
from db import db
from books.resource import Review, ReviewList

from flask_mongoengine import MongoEngine
import setting.mongo_setup as mongo_setup

app = Flask(__name__)
# mongo_setup.global_init()

# app.config.from_pyfile('setting/mongo_setting.py')
app.config['MONGODB_SETTINGS'] = {
    'db': 'meta',
    'host': 'XXXXXXXX',
    'port': XXX
}
app.config.from_pyfile('setting/sql_setting.py')

mongo_db = MongoEngine()
mongo_db.init_app(app)
db.init_app(app)

api = Api(app)
api.add_resource(Review, '/review/')

if __name__ == '__main__':
    app.run(port=5000, debug=True)

sql_setting.py:

import os

MYSQL_HOST = 'XXXXXXX'
MYSQL_PORT = XXXXX
DBNAME = "XXXXX"
MYSQL_USERNAME = "XXXXXX"
MYSQL_PASSWORD = "XXXXXX"

MYSQL_URI = "mysql+pymysql://%s:%s@%s:3306/%s" % (MYSQL_USERNAME, MYSQL_PASSWORD, MYSQL_HOST, DBNAME)
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_DATABASE_URI = MYSQL_URI```

【问题讨论】:

  • 您确定 ec2 实例是公开的吗?您应该尝试通过 mongo cli 工具连接到 mongodb 实例一次

标签: python mongodb flask flask-sqlalchemy mongoengine


【解决方案1】:

你能telnet到mongo主机吗

telnet x.x.x.x 27017

(其中x.x.x.x 是 mongo ip 地址)

图像中的错误通常发生在存在连接问题/端口/连接未在防火墙或安全组中列入白名单/允许时

【讨论】:

  • 嗨奥姆卡!我应该从执行 telnet 中看到什么?
  • 通过执行telnet,您应该能够看到mongo实例是否可以从您的服务器访问
【解决方案2】:

一)

app.config['MONGODB_SETTINGS'] = {
#__snip__
    'connect': 'direct',
}

可能会成功

b) 您应该从代码和错误图像中省略 mongo IP 地址。

【讨论】:

  • 你指的是哪个 MONGO_URI?
  • 我现在收到此错误:File "/opt/anaconda3/lib/python3.8/site-packages/mongoengine/connection.py", line 320, in _create_connection raise ConnectionFailure("Cannot connect to database {} :\n{}".format(alias, e)) mongoengine.connection.ConnectionFailure: Cannot connect to database default : Unknown option connection
  • 请用有关基础设施的信息更新您的问题。你用的是什么版本的mongoengine?你在使用码头工人吗? mongo 实例与烧瓶后端是否在不同的机器/服务器上?还是同一主机上的另一个 docker 容器?是配置了 vpc 的 AWS ec2 吗?还是 GCP ?还有更多
猜你喜欢
  • 2022-12-17
  • 2015-10-11
  • 1970-01-01
  • 2019-12-28
  • 1970-01-01
  • 2021-08-12
  • 2017-11-14
  • 2020-01-25
  • 2019-01-17
相关资源
最近更新 更多