CRUD操作
使用ORM进行CRUD(Create、Read、Update、Delete)操作,需要先把操作添加到会话中,通过db.session可以获取到会话对象。会话对象只是在内存中,如果想要把会话中的操作提交到数据库中,需要调用db.session.commit()操作,如果想要把会话中的操作回滚,则可以通过db.session.rollback()实现。下面分别对CRUD进行讲解。
1.添加
使用ORM创建一条数据非常简单,先使用ORM模型创建一个对象,然后添加到会话中,再进行commit操作即可,示例代码如下。
# 添加
@app.route('/user/add')
def add_user():
# 创建 ORM 对象
user = User(username="宇宙核", password="123456")
user1 = User(username="张三", password="111111")
user2 = User(username="李四", password="222222")
user3 = User(username="王五", password="333333")
# 将 ORM 对象添加到 db.session 中
db.session.add(user)
db.session.add(user1)
db.session.add(user2)
db.session.add(user3)
# 将 db.session 中的改变同步到数据库中
db.session.commit()
return "用户添加成功!"
然后打开数据库看看,看到下面那个即添加成功
2.查询
Read操作也就是查询。ORM模型都是继承自db.Model,db.Model内置的query属性上有许多方法,可以实现对ORM模型的查询操作。query上的方法可以分为两大类,分别是过滤方法以及提取方法。示例代码如下。
# 查询
@app.route('/user/query')
def query_user():
# 1.get查找:根据主键查找,一次只能查一条,这里的主键是id
# user = User.query.get(1)
# print(f'{user.id}-{user.username}-{user.password}')
# return '数据查找成功!'
# 2.filter_by查找,查找多条数据
users = User.query.filter_by(username='张三')
print(type(users)) # 这里得到的users是一个Query类数组,可以用下标来获取数据
for user in users:
print(user.username)
return '数据查找成功!'
3.修改
# 修改
@app.route('/user/update')
def update_user():
user = User.query.filter_by(username='宇宙核').first() # .first()拿到第一条数据
user.password = '666666'
db.session.commit()
return "数据修改成功!"
修改前:
修改后:
4.删除
# 删除
@app.route('/user/delete')
def delete_user():
# 1.查找
user = User.query.get(1)
# 2.从db.session中删除
db.session.delete(user)
# 3.将db.session中的修改同步到数据库中
db.session.commit()
return '数据删除成功!'
删除前:
删除后:
app.py 完整代码:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# MySQL所在的主机名或域名
HOSTNAME = '127.0.0.1'
# MySQL监听的端口号,默认3306
PORT = 3306
# 连接MySQL的用户名,用自己的
USERNAME = 'root'
# 连接MySQL的密码,用自己的
PASSWORD = '***'
# MySQL上创建的数据库名称
DATABASE = 'database_learn'
app.config[
'SQLALCHEMY_DATABASE_URI'] = f'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4'
# 在app.config中设置好连接数据库的信息
# 然后使用SQLAlchemy(app)创建一个db对象
# SQLAlchemy会自动读取app.config中连接数据库的信息
db = SQLAlchemy(app)
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(100), nullable=False)
password = db.Column(db.String(100), nullable=False)
with app.app_context(): # 请求应用上下文
db.create_all() # 把所有的表同步到数据库中去
@app.route('/')
def hello_world():
return 'Hello World!'
# 添加
@app.route('/user/add')
def add_user():
# 创建 ORM 对象
user = User(username="宇宙核", password="123456")
user1 = User(username="张三", password="111111")
user2 = User(username="李四", password="222222")
user3 = User(username="王五", password="333333")
# 将 ORM 对象添加到 db.session 中
db.session.add(user)
db.session.add(user1)
db.session.add(user2)
db.session.add(user3)
# 将 db.session 中的改变同步到数据库中
db.session.commit()
return "用户添加成功!"
# 查询
@app.route('/user/query')
def query_user():
# 1.get查找:根据主键查找,一次只能查一条,这里的主键是id
# user = User.query.get(1)
# print(f'{user.id}-{user.username}-{user.password}')
# return '数据查找成功!'
# 2.filter_by查找,查找多条数据
users = User.query.filter_by(username='张三')
print(type(users)) # 这里得到的users是一个Query类数组,可以用下标来获取数据
for user in users:
print(user.username)
return '数据查找成功!'
# 修改
@app.route('/user/update')
def update_user():
user = User.query.filter_by(username='宇宙核').first() # .first()拿到第一条数据
user.password = '666666'
db.session.commit()
return "数据修改成功!"
# 删除
@app.route('/user/delete')
def delete_user():
# 1.查找
user = User.query.get(1)
# 2.从db.session中删除
db.session.delete(user)
# 3.将db.session中的修改同步到数据库中
db.session.commit()
return '数据删除成功!'
if __name__ == '__main__':
app.run()