![](/img/trans.png)
[英]Why do I get a flask weakref error when importing my SQLAlchemy db from a submodule?
[英]Why do I get a NameError when importing external DB models into my Flask App?
我正試圖將我的模型分成一個單獨的文件,因為它太大了,無法管理。 我已遵循此步驟,但是盡管已運行db.create_all(),但仍收到NameError:
NameError:名稱“ importsTable”未定義
# stack_app.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from stack_dbmodels import db
from stack_dbmodels import importsTable
from datetime import datetime
app = Flask(__name__)
app.secret_key = 'secretsquirrel'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///stack_newAppCsv.db'
db.init_app(app)
@app.route('/', methods=['GET'])
def stack():
username = "username"
new_user = importsTable(username)
db.session.add(new_user)
db.session.commit()
return "Done!"
if __name__ == "__main__":
app.run(debug = True, port=8080)
我的模型文件:
# stack_dbmodels.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class importsTable(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80))
def __init__(self, username):
self.username = username
def __repr__(self):
return '<Import {0}>'.format(self.username)
問題主要是與應用程序的上下文有關,但是在我的測試過程中,我發現了一些陷阱。 進行上述工作的關鍵是:
當我引用importsTable時,除非沒有這樣做,否則最初並未定義它:
from stack_dbmodels import db
from stack_dbmodels import importsTable
創建.db文件時,上下文不正確,因此無法創建實際的importsTable,因此我添加了以下內容並解決了問題,關鍵是“ with app.app_context()”:
db.init_app(app)
with app.app_context():
db.create_all()
Final working code was:
# stack_app.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from stack_dbmodels import db
from stack_dbmodels import importsTable
from datetime import datetime
app = Flask(__name__)
app.secret_key = 'secretsquirrel'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///stack_newAppCsv.db'
db.init_app(app)
with app.app_context():
db.create_all()
@app.route('/', methods=['GET'])
def stack():
username = "username"
new_user = importsTable(username)
db.session.add(new_user)
db.session.commit()
return "Done!"
if __name__ == "__main__":
app.run(debug = True, port=8080)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.