【问题标题】:Unable to create in mysql running in docker-compose无法在 docker-compose 中运行的 mysql 中创建
【发布时间】:2021-08-09 21:05:33
【问题描述】:

我正在开发一个烧瓶应用程序,其中 mysql 数据库在 docker-compose 中运行。 下面是我的 docker-compose 和 flask 应用程序的初始化文件。

version: "3.9"
services:
  redis-server:
    image: 'redis:6.2.5-alpine'
    network_mode: 'host'
  database:
    image: 'mysql:8.0'
    network_mode: 'host'
    cap_add:
      - SYS_NICE
    environment:
      MYSQL_ROOT_PASSWORD: 'Myscretpassword'
      MYSQL_DATABASE: 'dev'
      MYSQL_USER: 'd1105'
      MYSQL_PASSWORD: 'Password123'

from flask import Flask
import redis
from flask_session import Session
import logging
from flask_sqlalchemy import SQLAlchemy



logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
c_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
c_handler = logging.StreamHandler()
c_handler.setFormatter(c_format)
logger.addHandler(c_handler)
key = None
db = SQLAlchemy()

def create_app():
    app = Flask(__name__, template_folder="templates")
    app.secret_key = "my scret key"

    app.config['SESSION_TYPE'] = 'redis'
    app.config['SESSION_PERMANENT'] = False
    app.config['SESSION_USE_SIGNER'] = True
    app.config['SESSION_REDIS'] = redis.from_url('redis://localhost:6379')
    server_session = Session(app)

    app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+mysqlconnector://d1105:Password123@localhost:3306/dev"
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    db.init_app(app)


    from EIS.EISApp.child.routes import child
    from EIS.EISApp.main.routes import main

    app.register_blueprint(child)
    app.register_blueprint(main)
    logger.info("Inside create app")
    return app

而模型文件是

from EIS.EISApp import db
from datetime import datetime

print("TESTING")


class Child(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    firstname = db.Column(db.String, nullable=False)
    middlename = db.Column(db.String, nullable=False)
    lastname = db.Column(db.String, nullable=False)
    child_dob = db.Column(db.Date, nullable=False)
    child_gender = db.Column(db.String, nullable=False)
    lastwritten = db.Column(db.DateTime, default=datetime.utcnow)
    addresses = db.relationship('Address', backref='child', lazy=True)
    # phonenumber = db.relationship('PhoneNumber', backref='child', lazy=True)
    # familyInfo = db.relationship('FamilyInformation', backref='child', lazy=True)
    # diagnosis = db.relationship('Diagnosis', backref='child', lazy=True)


class Address(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    address1 = db.Column(db.String, nullable=False)
    address2 = db.Column(db.String, nullable=True)
    county = db.Column(db.String, nullable=False)
    city = db.Column(db.String, nullable=False)
    state = db.Column(db.String, nullable=False)
    zip = db.Column(db.Integer, nullable=False)
    person_id = db.Column(db.Integer, db.ForeignKey('child.id'), nullable=False)

我可以在 DBeaver 时连接到数据库,但是当我尝试使用 python cli 创建表时,表没有被创建并且数据库服务器中没有错误

数据库服务器

已经 2 小时了,我无法弄清楚表未创建的原因。有人可以帮助我吗。谢谢

【问题讨论】:

  • 我会说您从未导入模型,因此您的 db 对象不知道 Child 和 Address 模型。
  • 这是我第二次犯同样的导入错误。我会确保不会发生这种情况。非常感谢

标签: mysql flask docker-compose flask-sqlalchemy


【解决方案1】:

看起来我缺少所需的导入。感谢 Victor 指出这一点。

【讨论】:

    猜你喜欢
    • 2019-08-28
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多