首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法连接到码头上的MySql。引发的访问拒绝错误。瓶-SqlAlchemy炼金术

问无法连接到码头上的MySql。引发的访问拒绝错误。瓶-SqlAlchemy炼金术
EN

Stack Overflow用户
提问于 2016-08-26 17:44:07
回答 2查看 3.5K关注 0票数 3

好吧,这段时间以来,我一直在努力让这件事起作用。下面是我从头到尾运行的命令行,下面显示了一个Access denied...错误。

代码语言:javascript
复制
$ docker-compose up --build -d
$ docker exec -it flaskdocker_mysql_1 mysql -u root -p
mysql> CREATE DATABASE flask_docker;
mysql> CREATE USER `flask-docker`@`localhost` IDENTIFIED BY 'pass';
mysql> GRANT ALL PRIVILEGES ON flask_docker.* TO 'flask-docker'@'localhost';
mysql> exit
Bye
$ docker exec -it flaskdocker_web_1 python /usr/src/app/manage.py createdb
# rest of traceback
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1045, u"Access denied for user 'flask-docker'@'flaskdocker_web_1.flaskdocker_default' (using password: YES)")

这是回购https://github.com/Amertz08/flask-docker

看起来,SqlAlchemy引擎没有看到正确的容器。'flask-docker'@'flaskdocker_web_1.flaskdocker_default'是错误中显示的内容。

也许我没有正确理解它,但是我在我的mysql:mysql文件中链接了docker-compose.yml

代码语言:javascript
复制
web:
    restart: always
    build: ./app
    volumes:
      - /usr/src/app/static
    expose:
      - "5000"
    environment:
      FLASK_CONFIG: 'production'
    links:
      - mysql:mysql
    command: /usr/local/bin/uwsgi --ini uwsgi.ini

然后在config.py中的config对象中,我有以下内容.

代码语言:javascript
复制
MYSQL_USER = 'flask-docker'
MYSQL_PASS = 'pass'
MYSQL_HOST = 'mysql'
MYSQL_DB = 'flask_docker'
# Database info
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://{usr}:{passwd}@{host}/{db}'.format(
    usr=MYSQL_USER, passwd=MYSQL_PASS, host=MYSQL_HOST, db=MYSQL_DB
)

如果能在这方面提供任何帮助,我们将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-26 17:59:37

问题似乎在于:

mysql> GRANT ALL PRIVILEGES ON flask_docker.* TO 'flask-docker'@'localhost';为本地主机用户授予特权

但是您使用mysql作为flask-docker'@'flaskdocker_web_1.flaskdocker_default用户。

若要解决此问题,请为flask-docker'@'flaskdocker_web_1.flaskdocker_default用户授予用户权限

票数 3
EN

Stack Overflow用户

发布于 2018-06-13 09:51:58

我将在这里添加另一个解决方案,因为我在这个问题上遇到了困难。为了让我能够从mysql-connector访问数据库,我使用了pip install mysql-connector(可以通过pip install mysql-connector安装),输入mysql并运行以下代码ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';

然后,我使用以下配置连接到mysql:

代码语言:javascript
复制
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from .db import db

app = Flask(__name__)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqlconnector://root:foo@127.0.0.1:3306/bar_db'
db = SQLAlchemy(app)

我仍然不太清楚为什么需要这样的工作,因为我以前从未在任何其他Python应用程序中使用过它,但是它看起来确实适用于libmysqlclient。

src:https://dev.mysql.com/doc/refman/8.0/en/native-pluggable-authentication.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39171970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档