这是模型代码,我已经测试过该代码,没有错误,它可以在DB中创建表,记录
createdb.py
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:@localhost:3306/ai'
db = SQLAlchemy(app)
if __name__ == 'createdb':
db.reflect()
db.drop_all()
db = SQLAlchemy(app)
class Class(db.Model):
id = db.Column(db.Integer, primary_key=True, unique=True, autoincrement=True)
label = db.Column(db.String(255), unique=True, nullable=False)
def __init__(self, label):
self.label = label
def __repr__(self):
return '<Class %r>' % self.username
class Photo(db.Model):
id = db.Column(db.Integer, primary_key=True, unique=True, autoincrement=True)
path = db.Column(db.String(1024), nullable=False)
def __init__(self, path):
self.path = path
def __repr__(self):
return '<Photo %r>' % self.username
class PhotoClass(db.Model):
id = db.Column(db.Integer, primary_key=True, unique=True, autoincrement=True)
photoId = db.Column(db.Integer, db.ForeignKey('photo.id'), nullable=False)
classId = db.Column(db.Integer, db.ForeignKey('class.id'), nullable=False)
score = db.Column(db.Float, nullable=False)
def __init__(self, photoId, classId):
self.photoId = photoId
self.classId = classId
def __repr__(self):
return '<PhotoClass %r>' % self.username
if __name__ == 'createdb':
db.create_all()
db.session.add(Class('Plain'))
db.session.add(Class('Printed'))
db.session.commit()
这是服务器代码
app.py
import createdb
app = Flask(__name__)
@app.route('/')
def index():
createdb.db.session.add(createdb.Class('aaa'))
createdb.db.session.commit()
return render_template('index.html')
if __name__ == '__main__':
app.run()
如果我导入到服务器,它仍然没有错误,当我进入localhost:5000时,会出现此错误
track_modifications = app.config['SQLALCHEMY_TRACK_MODIFICATIONS']
KeyError: 'SQLALCHEMY_TRACK_MODIFICATIONS'
这是完全错误
[2018-10-30 18:31:03,288] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File "C:\python\lib\site-packages\sqlalchemy\util\_collections.py", line 999, in __call__
return self.registry[key]
KeyError: 12344
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\python\lib\site-packages\flask\app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "C:\python\lib\site-packages\flask\app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\python\lib\site-packages\flask\app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\python\lib\site-packages\flask\_compat.py", line 35, in reraise
raise value
File "C:\python\lib\site-packages\flask\app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "C:\python\lib\site-packages\flask\app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "E:\0\airbtn\yeetungaiserver\app.py", line 17, in index
createdb.db.session.add(createdb.Class('aaa'))
File "C:\python\lib\site-packages\sqlalchemy\orm\scoping.py", line 153, in do
return getattr(self.registry(), name)(*args, **kwargs)
File "C:\python\lib\site-packages\sqlalchemy\util\_collections.py", line 1001, in __call__
return self.registry.setdefault(key, self.createfunc())
File "C:\python\lib\site-packages\sqlalchemy\orm\session.py", line 2950, in __call__
return self.class_(**local_kw)
File "C:\python\lib\site-packages\flask_sqlalchemy\__init__.py", line 142, in __init__
track_modifications = app.config['SQLALCHEMY_TRACK_MODIFICATIONS']
KeyError: 'SQLALCHEMY_TRACK_MODIFICATIONS'
答案 0 :(得分:0)
在createdb.py
中:
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:@localhost:3306/ai'
db = SQLAlchemy(app)
if __name__ == 'createdb':
db.reflect()
db.drop_all()
db = SQLAlchemy(app)
您创建名为Flask
的{{1}}实例,并将其传递给app
构造函数,将结果分配给变量SQLAlchemy
(实际上,当您从db
导入createdb
)。它们的关键点是app.py
实例化了db
实例Flask
。
然后进入app.py:
createdb.app
我在上面为您的app.py代码添加了更多详细信息,但简短之处在于import createdb # createdb.app is created upon import
app = Flask(__name__) # but you create a new `Flask` instance called app
@app.route('/')
def index():
# all of the below db operations occur on createdb.db which is in the
# createdb.app context, not the context of app created in this module
createdb.db.session.add(createdb.Class('aaa'))
createdb.db.session.commit()
return render_template('index.html')
if __name__ == '__main__':
# the app you run here, isn't the app that was made available to db in
# in createdb.py. It has no idea what db is!
app.run()
# try createdb.app.run()
中的app.run()
调用并未在{{1 1}}知道。