一、链接数据库
我们选择的框架是flask-sqlAlchemy 这个框架是对pymysql的封装。
连接数据库
#导入包
from flask_sqlalchemy import SQLAlchemy
#创建flask app对象
app = Flask(__name__)
#设置配置信息
HOSTNAME = "localhost"
PORT = 3306;
USERNAME = "root";
PASSWORD = "密码xxxxx";
DATABASE = "flask_test";
app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8";
#这里自动读取的配置就是SQLALCHEMY_DATABASE_URI这个配置。--利用配置创建数据库对象
db = SQLAlchemy(app)
这里就已经脸上数据库了
二、创建表
这里是继承db.Model这个类上的方法等。
class User(db.Model):
__tablename__ = "User";
id = db.Column(db.Integer,primary_key = True,autoincrement = True); #主键id 自增常
# varchar
username = db.Column(db.String(32),nullable = False);
password = db.Column(db.String(128),nullable = False);
create_time = db.Column(db.DateTime);
def __repr__(self): #设置输出打印格式
return "<Role:%s,%s>" % (self.id, self.username)
三、数据库表的增删改查操作
增
三步:
1、首先在python中先创建好相关对象。 --前面已经创建了数据库表类
2、将ORM对象添加到db.session会话中,这个数据库中你打开的一个文件也是一个会话。
3、将db.session中的改变同步到数据库中。
@app.route("/user/add")
def add_user():
# 1. 创建ORM对象
user = User(username="Carling",password = "Carlingisking!",create_time = datetime.now());
# 2. 将ORM对象添加到db.session中
db.session.add(user);
# 3. 将db.session中的改变同步到数据库中
db.session.commit();
return '用户创建成功!';
删
根据id删除,也是要先拿到数据记录再删除
@app.route('/user/delete')
def delete_user():
# 1. 查找
user = User.query.get(1)
# 2. 从db.session中删除
db.session.delete(user)
# 3. 将会话中的修改保存到数据库中
db.session.commit();
return "数据删除成功";
改
先拿到再改
@app.route("/user/update")
def update_user():
user = User.query.filter_by(username = "法外狂徒张三").first();
user.password = "22222";
db.session.commit();
return "数据修改成功";
查
@app.route("/user/query")
def query_user():
# 1. get查找:根据主键查找
user = User.query.get(1)
# 2. filter_by查找
# Query
users = User.query.filter_by(username = "法外狂徒张三”)
for user in users:
print(user.username);
return "数据查找成功";
数据库中的查有许多操作,下面例举一下
四、外键
1、创建外键 — 建表的时候,告知某个字段对应其余表的哪个字段。例如:
author_id = db.Column(db.Integer, db.ForeignKey("User.id"));
2、两个字段相互联系:
方法一:backref
#Article表中的字段author
author = db.relationship("User", backref="articles”) #这句话说明它需要对应User表中的字段articles,这时不需要再User表中进行补充代码
方法二:back_populates
#Article表中的字段author
author = db.relationship("User",back_populates = "articles”)
#User表中的字段articles
articles = db.relationship("Article", back_populates = "author")
将两个表联系起来。
五、ORM对象的migrate迁移
首先,问题是,为什么需要利用flask-migrate进行对象迁移?
Answer: 原始方案中的db.create_all() 不能够实现表创建完成之后的字段的增加和修改。
#原始方案
with app.app_context():
db.create_all()
因此要使用migrate框架来实现python中和数据库中的ORM对象的同步:
初始化迁移环境:
flask db init
在项目中创建一个migrate目录,用于存放迁移脚本
生成迁移脚本
flask db migrate
这个命令会比较你的模型定义和当前数据库的状态,生成一个迁移脚本
应用迁移
flask db upgrade
这个命令执行脚本,从而在数据库中创建或更新表结构