无法从烧瓶应用程序连接码头化的 mysql 容器



我正在尝试用flask和mysql制作一个码头化的应用程序。

但我在Flask SQLAlchemy上的execdb.create_all()中遇到了一个错误。

我已经确认可以连接以下内容。

你能告诉我是否还有其他设置错误吗?

mysql -h 127.0.0.1 -u root -P 3306 -p flask_db
Enter password:
mysql> 
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from .views import api
from datetime import datetime
app = Flask(__name__)
app.config.update(
SQLALCHEMY_DATABASE_URI = "mysql://root:flask-db@127.0.0.1:3306/flask_db",
SQLALCHEMY_TRACK_MODIFICATIONS = False,
)
db = SQLAlchemy(app)
app.register_blueprint(api)
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
created_at = db.Column(db.DateTime, nullable=False, default=datetime.now())
updated_at = db.Column(db.DateTime, nullable=False, default=datetime.now(), onupdate=datetime.now())
def __init__(self, name):
self.name = name
root@c8676d815528:/api# flask shell
Python 3.9.9 (main, Dec 21 2021, 07:09:55) 
[GCC 8.3.0] on linux
App: app [development]
Instance: /api/instance
>>> from app import db
>>> db
<SQLAlchemy engine=mysql://root:***@127.0.0.1:3306/flask_db?charset=utf8>
>>> db.create_all()
...
sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (2002, "Can't connect to MySQL server on '127.0.0.1' (115)")

我使用的是mysqlclient,所以我也尝试了以下操作,得到了相同的结果。

SQLALCHEMY_DATABASE_URI = "mysql+mysqldb://root:flask-db@127.0.0.1/flask_db"
.
├── Dockerfile
├── README.md
├── app
│   ├── __init__.py
│   ├── models.py
│   └── views.py
├── db
│   └── mysql
│       └── volumes
├── docker-compose.yml
├── requirements.txt
version: "3.8"
services:
db:
platform: linux/x86_64
image: mysql:8.0.27
container_name: flask-backend-db
environment:
MYSQL_ROOT_PASSWORD: flask-db
MYSQL_PASSWORD: flask-db
ports:
- "3306:3306"
volumes:
- ./db/mysql/volumes:/var/lib/mysql
api:
build:
context: .
dockerfile: ./Dockerfile
container_name: flask-backend
command: bash -c "flask run --host=0.0.0.0 --port=80"
volumes:
- .:/api
ports:
- "5000:80"
depends_on:
- db

versons

  • Python:3.9.9
  • 烧瓶:2.0.2
  • MySQL:8.0.27

谢谢你,图灵85!!我错了一个简单的docker配置。

SQLALCHEMY_DATABASE_URI = "mysql://root:flask-db@127.0.0.1:3306/flask_db",

SQLALCHEMY_DATABASE_URI = "mysql://root:flask-db@flask-backend-db:3306/flask_db",

最新更新