您现在的位置是:首页 >技术教程 >flask+flask_sqlalchemy增删改查网站首页技术教程

flask+flask_sqlalchemy增删改查

zhangqiang0821 2024-09-04 12:01:02
简介flask+flask_sqlalchemy增删改查

虚拟环境: python3 -m venv venv
激活虚拟环境 source venv/Scripts/activate

使用flask run启动项目 $env:FLASK_APP=‘app.py’
热更新 $env:FLASK_DEBUG=1

镜像:
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/

learn_sql.py

from flask_sqlalchemy import SQLAlchemy
from flask import Flask

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///first.db'  # 数据库位置
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SECRET_KEY'] = 'test'

db = SQLAlchemy(app)  # 实例化的数据库

# 学生表
class Student(db.Model):
    __tablename__ = 'student'
    id = db.Column(db.Integer, primary_key=True)  # 主键
    name = db.Column(db.String(64), nullable=False)  # 学生姓名 nullable能否为空
    gender = db.Column(db.Enum("男", "女"), nullable=False)  # 性别 Enum枚举 不能为空
    phone = db.Column(db.String(11))  # 手机号 可以为空
    grades = db.relationship('Grade', backref='student')  # 成绩关系关联
    courses = db.relationship('Course', secondary="student_to_course", backref='student')

# 课程表
class Course(db.Model):
    __tablename__ = 'course'
    id = db.Column(db.Integer, primary_key=True)  # 主键
    name = db.Column(db.String(64), nullable=False)  # 课名
    grades = db.relationship('Grade', backref='course')  # 成绩关系关联
    teacher_id = db.Column(db.Integer, db.ForeignKey('teacher.id'))  # 所属教师

# 教师表
class Teacher(db.Model):
    __tablename__ = 'teacher'
    id = db.Column(db.Integer, primary_key=True)  # 主键
    name = db.Column(db.String(64), nullable=False)  # 教师姓名 nullable能否为空
    gender = db.Column(db.Enum("男", "女"), nullable=False)  # 性别 Enum枚举 不能为空
    phone = db.Column(db.String(11))  # 手机号 可以为空
    course = db.relationship('Course', backref='teacher')  # 成绩关系关联

# 成绩表
class Grade(db.Model):
    __tablename__ = 'grade'
    id = db.Column(db.Integer, primary_key=True)  # 主键
    grade = db.Column(db.Integer, nullable=False)  # 成绩 nullable能否为空
    student_id = db.Column(db.Integer, db.ForeignKey('student.id')) # 学生的id,外键指向所属学生
    course_id = db.Column(db.Integer, db.ForeignKey('course.id'))  # 课程id

# 中间表
class StudentToCourse(db.Model):
    __tablename__ = 'student_to_course'
    id = db.Column(db.Integer, primary_key=True)  # 主键
    student_id = db.Column(db.Integer, db.ForeignKey('student.id'))  # 学生的id,外键指向所属学生
    course_id = db.Column(db.Integer, db.ForeignKey('course.id'))  # 课程id


if __name__ == '__main__':
    with app.app_context():
        db.create_all() # 创建表
        # db.drop_all() # 删库

operate_new_sql.py

from learn_sql import db, Student, Grade, Course, Teacher, app

with app.app_context():
    # 增
    # s1 = Student(name="张三", gender="男", phone="12345678900")
    # s2 = Student(name="李姐", gender="女", phone="13245678900")
    # s3 = Student(name="王妹", gender="女", phone="13345678900")
    # s4 = Student(name="陈总", gender="男", phone="13445678900")
    # 添加语句 第一种
    # db.session.add(s1)
    # db.session.commit()
    # 批量添加语句 第二种
    # db.session.add_all([s1, s2, s3, s4])
    # db.session.commit()

    # 查
    # 第一种: get id查询
    # stu = Student.query.get(1)
    # print(stu.name)
    # print(stu.gender)
    # 第二种:查全部
    # stu = Student.query.all()
    # for item in stu:
    #     print(item.name, item.gender, item.phone)
    # print(stu)
    # 第二种:条件查询
    # stu = Student.query.filter(Student.name == '王妹')
    # for item in stu:
    #     print(item.id, item.name)
    # 第四种:filter_by() first() all() 比较类似SQL的查询
    #     stu = Student.query.filter_by(name='张三').filter(Student.id==5)
    #     for item in stu:
    #         print(item.id, item.name)

    # 改
    # 第一种
    # stu = Student.query.filter(Student.gender=='男').update({"gender": "女"}) # 返回动了多少条数据
    # print(stu)
    # db.session.commit()
    # 第二种
    # stu = Student.query.filter(Student.gender == '女').first()
    # stu.gender = '男'
    # db.session.add(stu)
    # db.session.commit()
    # 第三种
    # stu = Student.query.all()
    # for item in stu:
    #     item.gender = '男'
    #     db.session.add(item)
    # db.session.commit()

    # stu = Student.query.all()
    # for item in stu:
    #     print(item.gender)
    # 删
    #     stu = Student.query.filter(Student.gender=='男').delete() # 返回动了多少条数据
    #     print(stu)
    #     db.session.commit()

    # stu = Student.query.all()
    # print(stu)

    print('-------------以下是一对多---------------')
    # grade1 = Grade(grade=100,student_id=1)
    # grade2 = Grade(grade=95, student_id=1)
    # db.session.add_all([grade1, grade2])
    # db.session.commit()

    # stu = Student.query.all()
    # for item in stu:
    #     print(item.gender, item.name)

    # grade = Grade.query.filter(Grade.student_id==1).all()
    # for item in grade:
    #     print(item.grade)

    # 通过 一访问多
    # stu = Student.query.get(1)
    # for item in stu.grades:
    #     print(stu.name,item.grade)

    # 通过 多 访问 一
    # grade = Grade.query.filter(Grade.grade == '100').all()
    # for item in grade:
    #     print(item.student.name)

    # 多对多
    # s1 = Student(name="张1", gender="男", phone="12345678900")
    # s2 = Student(name="张2", gender="女", phone="12345678900")
    # s3 = Student(name="张3", gender="男", phone="12345678900")
    # s4 = Student(name="张4", gender="女", phone="12345678900")
    # s5 = Student(name="张5", gender="男", phone="12345678900")
    # s6 = Student(name="张6", gender="女", phone="12345678900")
    # s7 = Student(name="张7", gender="男", phone="12345678900")
    # s8 = Student(name="张8", gender="女", phone="12345678900")
    # s9 = Student(name="张9", gender="男", phone="12345678900")
    # db.session.add_all([s1,s2,s3,s4,s5,s6,s7,s8,s9])
    # db.session.commit()
    #
    # t1 = Teacher(name="老数", gender="男", phone="12345678900")
    # t2 = Teacher(name="老英", gender="男", phone="12345678900")
    # t3 = Teacher(name="老王", gender="男", phone="12345678900")
    # t4 = Teacher(name="老语", gender="男", phone="12345678900")
    # t5 = Teacher(name="老体育", gender="男", phone="12345678900")
    # db.session.add_all([t1,t2,t3,t4,t5])
    # db.session.commit()
    #
    # c1 = Course(name="数学")
    # c2 = Course(name="语文")
    # c3 = Course(name="英语")
    # c4 = Course(name="物理")
    # c5 = Course(name="化学")
    # c6 = Course(name="生物")
    # db.session.add_all([c1, c2, c3, c4, c5, c6])
    # db.session.commit()
    # for i in range(1, 5):
    #     c = Course.query.filter(Course.id == i).update({"teacher_id": 1})
    # db.session.commit()

    # 查询学生
    # stu = Student.query.all()
    #
    # # 查询课程表
    # cs = Course.query.filter(Course.id >= 2).all()
    # print(cs)
    # stu = Student.query.filter(Student.id >=2).all()
    # for s in stu:
    #     s.courses = cs
    #     db.session.add(s)
    #     db.session.commit()

    # 学生查询课程
    # stu = Student.query.get(1)
    # for s in stu.courses:
    #     print(s.name)
    #
    # # 课程查询学生
    # stu = Course.query.get(2)
    # for s in stu.students:
    #     print(s.name)
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。