老师,我的代码报这个错误,我直接跑老师提供的代码也是报同样错误。然后我尝试根据这个网址上的博客解决(解决flask报错:RuntimeError: Working outside of application context._bianlidou的博客-CSDN博客),但是在globals.py这个文档里找不到相应函数。
""" 数据库连接 数据库初始化不再是通过create_engine。 跟sqlalchemy一样,定义好数据库连接字符串DB_URI。 将这个定义好的数据库连接字符串DB_URI,通过SQLALCHEMY_DATABASE_URI这个key名配置到app.config中。 app.config["SQLALCHEMY_DATABASE_URI"] = DB_URI 使用flask_sqlalchemy.SQLAlchemy这个类定义一个对象,并将app传入进去。 db = SQLAlchemy(app) 创建ORM模型类 使用db.Model来作为基类 在模型类中,Column、String、Integer以及relationship等,都不需要导入了,直接使用db下面相应的属性名就可以了 在定义模型的时候,可以不写__tablename__,那么flask_sqlalchemy会默认使用当前的模型的名字转换成小写来作为表的名字 将ORM模型映射到数据库表 1. 删除数据库表:db.drop_all() 2. 创建数据库表:db.create_all() session的使用 直接使用db.session 查询数据 单表查询:不再是之前的session.query方法了,而是将query属性放在了db.Model上 多表查询:如果查找数据涉及多个模型,只能使用db.session.query(模型名).all() 这种方式 """ from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask import current_app app = Flask(__name__) # 数据库的变量 HOST = 'localhost' PORT = 3306 DATA_BASE = 'flask_db' USER = 'root' PWD = '123456' # 定义好数据库连接字符串DB_URI DB_URI = f'mysql+pymysql://{USER}:{PWD}@{HOST}:{PORT}/{DATA_BASE}' # 将这个定义好的数据库连接字符串DB_URI,通过SQLALCHEMY_DATABASE_URI这个key名配置到app.config中。 app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 链接数据库 将app传入类对象 db = SQLAlchemy(app) # 创建模型类 class User(db.Model): __tablename__ = 't_user' id = db.Column(db.Integer,primary_key = True,autoincrement = True) name = db.Column(db.String(32)) def __repr__(self): return f'<User id={self.id} name={self.name}>' class News(db.Model): __tablename__ = 't_news' id = db.Column(db.Integer,primary_key = True,autoincrement = True) content = db.Column(db.String(100)) uid = db.Column(db.Integer,db.ForeignKey('t_user.id')) user = db.relationship('User',backref = 'newss') def __repr__(self): return f'<News id={self.id} content={self.content}>' # 删除表 db.drop_all() # 创建表 db.create_all() # 增加数据 def create_data(): user = User(name = '百战') news = News(content = 'Python内容') user.newss.append(news) db.session.add(user) db.session.commit() # 查询单表数据 def query_data_one(): users = User.query.all() print(users) # 查询多表数据 def query_data_many(): rs = db.session.query(User,News.content).join(News,News.uid == User.id).all() print(rs) # 修改数据 def update_data(): user = User.query.first() user.name = '百战程序员' db.session.commit() # 删除数据 def delete_data(): news = News.query.first() db.session.delete(news) db.session.commit() if __name__ == '__main__': create_data() # query_data_one() # query_data_many() # update_data() # delete_data() # pass