(零七)Flask有手就行——初识数据库(Flask-SQLAlchemy)

本文详细介绍了如何在Flask应用中使用Flask-SQLAlchemy进行ORM数据库操作,包括安装、初始化、模型创建及增删改查等基本操作。通过创建表格、添加用户、查询和删除用户等示例,展示了SQLAlchemy的各种查询方式,如基本查询、复杂条件查询、排序和分页等。
摘要由CSDN通过智能技术生成

零、前言

本篇文章,阐述一下Flask中数据库的ORM的使用

冲

安装

直接使用pip install flask-sqlalchemy即可

使用

初始化

使用ORM可以使我们不用写复杂的SQL语句

数据库我们使用Python自带的sqlite3这个不需要安装。

创建exts.py文件,写上如下内容:

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

上面代码意思是:创建一个SQLAlchemy对象

创建models.py文件,写上如下内容:

from exts import db

class User(db.Model):
	id = db.Column(db.Integer,primary_key=True)
	username = db.Column(db.String(80),unique=True)

	def __repr__(self):
		return '<User %s>' % self.username

上面代码意思是:创建一个用户的模型,方面我们操作

最终创建app.py文件,写上如下内容:

from flask import Flask, jsonify
from exts import db
from models import User

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:///foo.db"
db.init_app(app)

上面代码意思是:将我们的数据库和flask_app进行绑定。
数据库的地址为:当前目录下的foo.db文件

至此,数据库的初始操作已经完成。

聪明的小伙伴就要问了,为什么不将exts.py和app.py进行合并了?
答:如果合并之后,那么models.py会引用SQLAlchemy对象,而app.py又会从models.py中引用User对象,这样会产生一个循环引用的问题。

增删改查

@app.route('/create_table')
def create_table():
    db.create_all()
    return f"数据库已经创建成功"

@app.route('/create/<name>')
def create(name):
    user = User(username=name)
    db.session.add(user)
    db.session.commit()
    return f"用户{name}已经创建成功"

@app.route('/query/all')
def query_all():
    users = User.query.all()
    data = {"all user": str(users)}
    return jsonify(data)

@app.route('/query_by/<name>')
def query_by_name(name):
    user = User.query.filter_by(username=name).first()
    data = {"user": str(user)}
    return jsonify(data)

@app.route('/delete_by/<name>')
def delete_by_name(name):
    user = User.query.filter_by(username=name).first()
    db.session.delete(user)
    db.session.commit()
    return "用户:删除成功"
  • 首先需要访问create_table来创建数据库
  • 然后可以通过create/xiaobing创建一个小兵用户
  • 通过query_all查询全部用户
  • 通过delete_by/xiaobing删除小兵用户

查询方式总结大全

# 查询所有用户
User.query.all()

# 查询用户条数
User.query.count()

# 查询第一个用户
User.query.first()
User.query.get(1) 

# 查询id为4的用户
User.query.get(4)
User.query.filter_by(id=4).all()   # 简单查询  使用关键字实参的形式来设置字段名
User.query.filter(User.id == 4).all()  # 复杂查询  使用恒等式等其他形式来设置条件

# 查询id为[1, 3, 5, 7, 9]的用户
User.query.filter(User.id.in_([1, 3, 5, 7, 9])).all()

# 查询名字结尾字符为g的所有用户[开始 / 包含]
User.query.filter(User.name.endswith("g")).all()
User.query.filter(User.name.startswith("w")).all()
User.query.filter(User.name.contains("n")).all()
User.query.filter(User.name.like("%n%g")).all()  模糊查询

# 与查询
from sqlalchemy import and_
User.query.filter(and_(User.name.startswith("li"), User.email.startswith("li"))).all()

# 或查询
from sqlalchemy import or_
User.query.filter(or_(User.age == 25, User.email.endswith("itheima.com"))).all()

# 非查询
from sqlalchemy import not_
User.query.filter(not_(User.name == "wang")).all()
User.query.filter(User.name != "wang").all()

# 所有用户先按年龄从小到大, 再按id从大到小排序, 取前5个
User.query.order_by(User.age, User.id.desc()).limit(5).all()

扩展文献

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自由小冰儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值