Resumen de varios problemas al conectar la base de datos Flask y Mysql

fondo

Recientemente comencé a escribir Flask nuevamente y descubrí que se habían olvidado muchos puntos de conocimiento, y también encontré muchos problemas en el proceso de conexión a la base de datos, por lo que agregué especialmente un blog aquí para registrar todos los mensajes de error que ocurrieron en el uso de Bases de datos Flask y MySQL Para su referencia. Se recomienda encarecidamente utilizar la combinación de * VScode + Anaconda *, que puede realizar la gestión del entorno y el cambio rápido entre diferentes entornos.

Usar bibliotecas y versiones de terceros

  • Matraz 1.1.2
  • Matraz-SQLAlchemy 2.5.1
  • mysql 5.56
  • Pitón 3.5

Resumen del problema

Después de inicializar la base de datos db.create_all(), se informa un error. El mensaje de error es:
flask_sqlalchemy\__init__.py", line 1043, in get_app
No application found. Either work inside a view function or push
RuntimeError: No application found. Either work inside a view function or push an application context. See http://flask-sqlalchemy.pocoo.org/contexts/.
Revisé rápidamente mi archivo de configuración. Cuando se desarrolló el programa, se usó exts.pycomo un archivo de terceros para almacenar la clase db y manage.pyhacer referencia a ella en el archivo. Los detalles del archivo son los siguientes:
exts.py

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

gestionar.py

from flask import Flask, render_template
from exts import db


app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = r'mysql://root:password@localhost/mydb?charset=utf8mb4'
db.init_app(app)

solución

>>> from manage import db #导入db
>>> from manage import app #导入创建的app应用
>>> db.create_all(app=app) #将APP应用与db进行绑定
或
>>> from manage import app #导入创建的app应用
>>> from flask_sqlalchemy import SQLAlchemy #手动导入 SQLAlchemy
>>> db = SQLAlchemy(app) #绑定app
>>> db.create_all() #创建模型

Link de referencia

Use matraz-sqlalchemy para conectarse a una base de datos existente

En desarrollo, es posible que necesite usar sqlalchemy para conectarse directamente a la base de datos creada. En la mayoría de los tutoriales, db.create_all() se usa para crear una nueva tabla de base de datos, pero de hecho, si se conecta a una tabla de base de datos que ya tiene datos , puede omitir Después de este paso, solo necesita especificar la tabla de datos que se conectará en el modelo.

class Project(db.Model):
    """
    项目类,用于存储项目信息
    """
    __tablename__ = 'project'

    id = db.Column(db.Integer, primary_key=True)
    project_name = db.Column(db.String(255))
    customer = db.Column(db.String(50), nullable=False)
    contact = db.Column(db.String(255), nullable=False)
    details = db.Column(db.String(500), nullable=False)
    deadline = db.Column(db.Date, nullable=False)
    finish_date = db.Column(db.Date)
    payment = db.Column(db.Integer)
    progress = db.Column(db.Integer)
    source = db.Column(db.Integer)
    price = db.Column(db.String(100), nullable=False)
    is_del = db.Column(db.Integer, nullable=False)

Después de importar el modelo, puede consultar directamente

>>> from xianyu.models.project import Project
>>> Project.query.all()
[<Project normal mark>, <Project 简简单单写个备注>, <Project normal mark>, <Project normal mark>, <Project normal mark>, <Project normal mark>]

Se puede verificar en el caparazón que viene con el matraz.El comando para iniciar el caparazón es el siguiente

# 格式:flask -A app所在的入口文件名:app名 shell
flask -A main:app shell
# 可以使用 flask --help 查看命令详情
  -A, --app IMPORT      The Flask application or factory function to load, in
                        the form 'module:name'. Module can be a dotted import
                        or file path. Name is not required if it is 'app',
                        'application', 'create_app', or 'make_app', and can be
                        'name(args)' to pass arguments.

Supongo que te gusta

Origin blog.csdn.net/qq_20728575/article/details/116193067
Recomendado
Clasificación