我有兩個檔案,一個是資料庫模型,另一個是主檔案。creat_admin_user 函式不起作用。當我嘗試運行init .py 時,我得到“未找到應用程式。要么在視圖函式中作業,要么推送應用程式背景關系”。我查看了 SQLAlchemy 站點,我有 db.init_app 行并回傳了應用程式物件。不知道我還缺少什么。該錯誤似乎出現在用戶查詢上,這是 create_admin_user 函式的第一行。
--------------- __init__.py ---------------
from .models import User, Note, db, DB_NAME
from flask import Flask
def create_app():
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{DB_NAME}'
db.init_app(app)
create_database(app)
# create Admin user
create_admin_user()
return app
def create_database(app):
if not path.exists('website/' DB_NAME):
db.create_all(app=app)
print('Created Database!')
def create_admin_user():
user = User.query.filter_by(username='admin').first()
print("after query")
if user:
print("User already exists")
else:
# Add user to DB
add_user = User(first_name='LocalAdmin', username='admin', password=generate_password_hash(gen_password,
method='sha256'))
# adds user and commits the db.session.add(add_user)
db.session.commit()
print(f"Admin user created successfully")
--------------- Models.py ---------------
import datetime
from flask_login import UserMixin
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.sql import func
db = SQLAlchemy()
DB_NAME = "database.db"
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
first_name = db.Column(db.String(100))
last_name = db.Column(db.String(100))
email = db.Column(db.String(100))
username = db.Column(db.String(100), nullable=False)
password = db.Column(db.String(100))
domain = db.Column(db.String(100), nullable=False)
creation_date = db.Column(db.DateTime, default=datetime.datetime.now())
last_login = db.Column(db.DateTime, onupdate=datetime.datetime.now())
failed_login = db.Column(db.Integer)
active = db.Column(db.Integer, default=1)
uj5u.com熱心網友回復:
如果你想在不啟動 Flask 應用程式的情況下運行改變 Flask 應用程式資料庫的函式,你必須先推送應用程式背景關系。
所以你必須這樣稱呼:
self.app = create_app()
self.app_context = self.app.app_context()
self.app_context.push()
并且不要忘記洗掉背景關系后記。
self.app_context.pop()
uj5u.com熱心網友回復:
得到它的作業。我在呼叫 create_admin 函式之前添加了 app.app_context().push() 并且它現在可以正常作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/420240.html
標籤:
