【发布时间】: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