【发布时间】:2022-11-18 16:47:56
【问题描述】:
我整天都在尝试从我的 SQLALCHEMY flask 应用程序连接到 MySQL 运行容器,但没有成功。不知道我做错了什么,也许我遗漏了一些您可能会引起我注意以解决我的问题的东西。
仅供参考。
我有以下文件:
带有 MySQL 和 Adminer 的 docker-compose.yml 文件:
version: '3.1'
services:
db:
image: mysql:5.7
restart: unless-stopped
environment:
MYSQL_DATABASE: mysqldb
MYSQL_ROOT_PASSWORD: master
MYSQL_USER: user
MYSQL_PASSWORD: password
networks:
- mysqlcomposenetwork
volumes:
- ./data:/data
ports:
- 100:100
adminer:
image: adminer
restart: unless-stopped
ports:
- 8080:8080
networks:
- mysqlcomposenetwork
networks:
mysqlcomposenetwork:
driver: bridge
db.yml 文件来存储与应用程序隔离的连接字符串信息。
mysql_host: 'localhost:100'
mysql_user: 'user'
# Enter your password in field below
mysql_password: 'password'
mysql_db: 'mysqldb'
最后是我的 app.py,这是一个通过 flask_sqlalchemy 模块利用 ORM 的基本 Flask 应用程序。请注意,在运行 app.py 之前,mysql 和 adminer 容器都在运行,并且 db.yml 文件位于 app.py 的同一目录中;因此,可访问。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import pymysql
import datetime
import yaml
app = Flask(__name__)
db = yaml.full_load(open('db.yml'))
#mysql://username:password@host:port/database_name
connection_str='mysql+pymysql://'+db['mysql_user']+':'+db['mysql_password']+'@'+db['mysql_host']+'/'+db['mysql_db']
app.config['SQLALCHEMY_DATABASE_URI']=connection_str
print(connection_str)
db = SQLAlchemy(app)
class Visitor(db.Model):
accessed_at=db.Column(db.Float,primary_key=True)
user_id=db.Column(db.Integer)
page_id=db.Column(db.Integer)
def __init__(self,accessed_at,user_id,page_id):
self.accessed_at=accessed_at
self.user_id=user_id
self.page_id=page_id
if __name__ == '__main__':
with app.app_context():
db.create_all()
visitor=Visitor(datetime.datetime.now().timestamp(),1000,5)
db.session.add(visitor)
db.session.commit()
print(Visitor.query.all())
运行app..py后提示如下错误:sqlalchemy.exc.OperationalError:(pymysql.err.OperationalError)(2003,“无法连接到‘localhost’上的 MySQL 服务器([WinError 10061]
已经尝试将 mysql_host: 'localhost:100' 更改为 mysql_host: 'db:100' 和 mysql_host: 'db'。他们都没有工作...
感谢您的关注和可能的反馈,以帮助我克服程序中的这个严重问题。
我无法从外部连接到 MySQL 容器数据库。具体来说,来自烧瓶应用程序。
【问题讨论】:
标签: python flask docker-compose flask-sqlalchemy mysql-python