Python Flask-如何使用数据库服务器访问lohalhost?

问题描述 投票:0回答:1

文件.evn

DB_HOST=127.0.0.1:3307
DB_DATABASE=bookinghotel_db
DB_USERNAME=root
DB_PASSWORD=

文件config.py

import os

basedir = os.path.abspath(os.path.dirname(__file__))

class Config(object):
    HOST = str(os.environ.get("DB_HOST"))
    DATABASE = str(os.environ.get("DB_DATABASE"))
    USERNAME = str(os.environ.get("DB_USERNAME"))
    PASSWORD = str(os.environ.get("DB_PASSWORD"))

    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://' + USERNAME + '/' + PASSWORD + '@' + HOST + '/' + DATABASE
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SQLALCHEMY_RECORD_QUERIES = True`
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'root' ([Errno 11001] getaddrinfo failed)")
python sqlalchemy pymysql
1个回答
0
投票

您遇到的错误消息表明您在 Flask 配置中定义数据库连接 URL 和主机名的方式存在问题。要使用 Flask 和 SQLAlchemy 访问 MySQL 数据库服务器,您应该按照以下步骤操作:

首先,确保您的 MySQL 服务器正在运行并且可以在指定主机 (127.0.0.1) 和端口 (3307) 上访问。

更新 .env 文件以分隔 DB_HOST 变量中的主机和端口:

DB_HOST=127.0.0.1
DB_PORT=3307
DB_DATABASE=bookinghotel_db
DB_USERNAME=root
DB_PASSWORD=

修改 config.py 文件以在数据库 URI 中包含端口:

import os

basedir = os.path.abspath(os.path.dirname(__file__))

class Config(object):
    HOST = str(os.environ.get("DB_HOST"))
    PORT = str(os.environ.get("DB_PORT"))
    DATABASE = str(os.environ.get("DB_DATABASE"))
    USERNAME = str(os.environ.get("DB_USERNAME"))
    PASSWORD = str(os.environ.get("DB_PASSWORD"))

    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://' + USERNAME + ':' + PASSWORD + '@' + HOST + ':' + PORT + '/' + DATABASE
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SQLALCHEMY_RECORD_QUERIES = True

确保将 Config 导入 Flask 应用程序并将其设置为配置:

from flask import Flask
from config import Config
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)

# ... rest of your Flask application code ...

确保MySQL服务器正在运行并且可以在指定的主机和端口上访问。另外,如果您打算使用该端口,请验证 MySQL 服务是否配置为侦听端口 3307。

完成这些更改后,您的 Flask 应用程序应该能够使用提供的凭据和主机信息连接到 MySQL 数据库。

© www.soinside.com 2019 - 2024. All rights reserved.