cluser 数据写入是通过槽位进行对应存储到相对应的服务器上,那么例如,101这台服务器挂了,那么之前写入到101这台服务器上的数据还能取到吗?这个有个问题就是,多台服务器之间的数据是如何共享的呢?
老师,我的代码报这个错误,我直接跑老师提供的代码也是报同样错误。然后我尝试根据这个网址上的博客解决(解决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