如何使用MySQL和flask使用应用程序工厂格式更新列和表

2024-03-28 17:29:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从sqlite数据库切换到MySQL数据库。我的代码格式化为应用程序工厂。我无法计算如何将新表和列写入数据库

当我尝试在cmd中使用python导入db时,它不会立即发出错误,但它也不会像通常那样向我发出令人沮丧的消息

当我尝试db.create_all()时,会收到错误消息“RuntimeError:找不到应用程序。请在视图函数内工作或推送应用程序上下文。请参见http://flask-sqlalchemy.pocoo.org/contexts/."

这是我的档案目录

run.py

| output

|

+---flaskblog

| | __init__.py

| | config.py

| | models.py

| | create_db.py

| |

| +---main

| | | __init__.py

| | | routes.py

| | |

| | \---__pycache__

| | __init__.cpython-39.pyc

| | routes.cpython-39.pyc

| |

| +---posts

| | | __init__.py

| | | forms.py

| | | routes.py

| | |

| | \---__pycache__

| | __init__.cpython-39.pyc

| | forms.cpython-39.pyc

| | routes.cpython-39.pyc

| |

| +---static

| | | main.css

| | |

| | \---profile_pics

| | 2e32b4c96a8d8f10.jpg

| | 7798432669b8b3ac.jpg

| | 7ef894751d31a45b.png

| | 85ed1b444539873d.png

| | b6e1c53325f88b74.png

| | ddd3ffe2e3271c40.jpg

| | default.jpg

| | efa0307c90a78bdb.jpg

| | 862fb198a6144986.jpg

| |

| +---templates

| | about.html

| | account.html

| | create_post.html

| | home.html

| | layout.html

| | login.html

| | post.html

| | register.html

| | reset_request.html

| | reset_token.html

| | user_posts.html

| |

| +---users

| | | __init__.py

| | | forms.py

| | | routes.py

| | | utils.py

| | |

| | \---__pycache__

| | __init__.cpython-39.pyc

| | utils.cpython-39.pyc

| | forms.cpython-39.pyc

| | routes.cpython-39.pyc

| |

| +---__pycache__

| | config.cpython-39.pyc

| | __init__.cpython-39.pyc

| | models.cpython-39.pyc

| |

| \---errors

| | handlers.py

| | __init__.py

| |

| \---__pycache__

| __init__.cpython-39.pyc

| handlers.cpython-39.pyc

这是我的一些代码-

models.py:

from datetime import datetime
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
from flask import current_app
from flaskblog import db, login_manager
from flask_login import UserMixin
u/login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))

class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
postcode = db.Column(db.String(10), nullable=False)
image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
password = db.Column(db.String(60), nullable=False)
posts = db.relationship('Post', backref='author', lazy=True)
def get_reset_token(self, expires_sec=1800):
s = Serializer(current_app.config['SECRET_KEY'], expires_sec)
return s.dumps({'user_id': self.id}).decode('utf-8')
@staticmethod
def verify_reset_token(token):
s = Serializer(current_app.config['SECRET_KEY'])
try:
user_id = s.loads(token)['user_id']
except:
return None
return User.query.get(user_id)
def __repr__(self):
return f"User('{self.username}', '{self.email}', '{self.postcode}', '{self.image_file}')"

class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
content = db.Column(db.Text, nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
def __repr__(self):
return f"Post('{self.title}', '{self.date_posted}')"

run.py:

from flaskblog import create_app
app = create_app()

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

init.py:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_bcrypt import Bcrypt
from flask_login import LoginManager
from flask_mail import Mail
from flaskblog.config import Config

db = SQLAlchemy()
bcrypt = Bcrypt()
login_manager = LoginManager()
login_manager.login_view = 'users.login'
login_manager.login_message_category = 'info'
mail = Mail()

def create_app(config_class=Config):
app = Flask(__name__)
app.config.from_object(Config)
db.init_app(app)
bcrypt.init_app(app)
login_manager.init_app(app)
mail.init_app(app)
from flaskblog.users.routes import users
from flaskblog.posts.routes import posts
from flaskblog.main.routes import main
from flaskblog.errors.handlers import errors
app.register_blueprint(users)
app.register_blueprint(posts)
app.register_blueprint(main)
app.register_blueprint(errors)
return app

非常感谢您的帮助,谢谢