Python MySQL Docker 错误:迁移时出现名为 main 的未知数据库

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

我正在尝试将我的 python 更改迁移到我的 docker 项目,但是当我尝试运行命令

python manage.py db migrate
时,我收到错误
unknown database 'main'
,但是当我查看 docker-compose.yml 文件内部时,我看到 main确实是在容器数据库的
MYSQL_DATABASE
变量内部定义的。我尝试了在 StackOverflow 和 Github 上找到的一些解决方案,例如从 docker-compose.yml 脚本中获取
restart: always
并制作一个 Windows PowerShell 脚本,该脚本将运行以重新启动我的 docker 容器,如下所示:MYSQL Docker 容器给出“未知数据库”错误,并尝试更改我的
DATA_SAVE_PATH
变量和 docker-compose.yml 中的其他此类变量:https://github.com/laradock/laradock/issues/1017 我也尝试过将
MYSQL_DATABASE
变量更改为不同的名称,但这也不起作用。

这是我运行代码时收到的完整错误:

sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1049, "Unknown database 'main'")
(Background on this error at: http://sqlalche.me/e/13/e3q8)

这是我的

docker-compose.yml
脚本:

version: '3.9'
services:
  backend:
    build: 
      context: .
      dockerfile: Dockerfile
    ports:
      - 8001:5000
    volumes: 
      - .:/app
    depends_on:
      - db

  db:
    image: mysql:5.7.22
    restart: always
    environment:
      MYSQL_DATABASE: main
      MYSQL_USER: root
      MYSQL_PASSWORD: root
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - .dbdata:/var/lib/mysql
    ports:
      - 33067:3306

这是我的 Dockerfile:

FROM python:3.9
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY requirements.txt /app/requirements.txt
RUN pip install -r requirements.txt
COPY . /app
CMD python main.py

这是我的

main.py
文件:

from flask_cors import CORS
from sqlalchemy import UniqueConstraint
from vegaaimain.vegamain import main
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = 'mysql://root:root@db/main'
CORS(app)

db = SQLAlchemy(app)
 

class VegaScriptRun(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=False)
    title = db.Column(db.String(200))
    description = db.Column(db.String(400))
    image = db.Column(db.String(200))
    main()

class VegaScriptUser(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer)
    title = db.Column(db.String(200))
    description = db.Column(db.String(400))
    image = db.Column(db.String(200))

    UniqueConstraint('user_id', 'title', 'description', 'image', name='user_experiment_unique')
@app.route('/')
def index():
    return 'Hello'

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')

最后是我的

manage.py
文件和
requirements.txt
文件:

from main import app, db
from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager

migrate = Migrate(app, db)

manager = Manager(app)
manager.add_command('db', MigrateCommand)

if __name__ == '__main__':
    manager.run()

需求.txt

Flask==1.1.2
Flask-SQLAlchemy==2.4.4
SQLAlchemy==1.3.20
Flask-Migrate==3.0.0
Flask-Script==2.0.6
Flask-Cors==3.0.9
requests==2.25.0
mysqlclient==2.0.1
pika==1.1.0
wolframalpha==5.0.0

我到底错过了什么或做错了什么,谢谢!

python mysql docker docker-compose
2个回答
0
投票

我通过查看 .dbdata 文件夹并找到我的服务解决了这个问题,然后我将

MYSQL_DATABASE
变量和应用程序配置更改为与
MYSQL_DATABASE
相同的变量,即
vegatest
而不是
main

所以我运行了相同的命令

python manager.py db migrate
并且我成功迁移了。


0
投票

检查数据库名称或数据库的静态路径

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