flask_sqlalchemy

Posted HaimaBlog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flask_sqlalchemy相关的知识,希望对你有一定的参考价值。

1. model.py

# pip install flask-sqlalchemy
from flask_sqlalchemy import SQLAlchemy
from flask import Flask

app = Flask(__name__)

# app.config[\'SQLALCHEMY_DATABASE_URI\'] = \'mysql+pymysql://root:123456@127.0.0.1:3306/test\'

app.config[\'SQLALCHEMY_DATABASE_URI\'] = \'sqlite:///\' + "/home/lmp/test.db"

app.config[\'SQLALCHEMY_TRACK_MODIFICATIONS\'] = False
app.config[\'SECRET_KEY\'] = \'xxx\'
db = SQLAlchemy(app)


# 学生表
class Student(db.Model):
    __tablename__ = "student"
    id = db.Column(db.Integer, primary_key=True)  # id号(独一无二的)
    name = db.Column(db.String(64), nullable=False)  # 学生姓名
    gender = db.Column(db.Enum("男", "女"), nullable=False)  # 学生性别
    phone = db.Column(db.String(11), unique=True, nullable=False)  # 学生手机号
    courses = db.relationship("Course", secondary="student_course", backref="students")  # 关系关联
    grades = db.relationship("Grade", backref="student")  # 成绩关系关联


# 学生-课程中间表
class StudentCourse(db.Model):
    __tablename__ = "student_course"
    id = db.Column(db.Integer, primary_key=True)  # id号(独一无二的)
    students_id = db.Column(db.Integer, db.ForeignKey("student.id"))  # 学生的id
    courses_id = db.Column(db.Integer, db.ForeignKey("course.id"))  # 课程的id


# 课程表
class Course(db.Model):
    __tablename__ = "course"
    id = db.Column(db.Integer, primary_key=True)  # id号(独一无二的)
    name = db.Column(db.String(32), unique=True)  # 课程名字
    teacher_id = db.Column(db.Integer, db.ForeignKey("teacher.id"))  # 所属老师的id
    grades = db.relationship("Grade", backref="course")  # 成绩关系关联


# 教师表
class Teacher(db.Model):
    __tablename__ = "teacher"
    id = db.Column(db.Integer, primary_key=True)  # id号(独一无二的)
    name = db.Column(db.String(32), unique=True)  # 姓名
    phone = db.Column(db.String(11), unique=True, nullable=False)  # 手机号
    gender = db.Column(db.Enum("男", "女"), nullable=False)  # 性别
    course = db.relationship("Course", backref="teacher")  # 所教课程


# 成绩表
class Grade(db.Model):
    __tablename__ = "grade"
    id = db.Column(db.Integer, primary_key=True)  # id号(独一无二的)
    my_grade = db.Column(db.String(32), unique=True)  # 分数
    course_id = db.Column(db.Integer, db.ForeignKey("course.id"))  # 所属课程
    students_id = db.Column(db.Integer, db.ForeignKey("student.id"))  # 所属学生


if __name__ == "__main__":
    db.create_all()
    # db.drop_all()

实操作

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

# 增

# s = Student(name="张三", gender="男", phone="12345678900")

# s1 = Student(name="kk", gender="女")
# s2 = Student(name="张蛋", gender="女")
# s3 = Student(name="李四", gender="男")
# s4 = Student(name="李鬼", gender="男", phone="12345678900")

# 语句 第一种
# db.session.add(s)
# db.session.commit()
#
# db.session.add_all([s1, s2, s3, s4])
# db.session.commit()

# 查

# get(id) 查 单一个
# stu = Student.query.get(1)
# print(stu)
# print(stu.name)
# print(stu.gender)
# print(stu.phone)

# all() 查全部
# stu = Student.query.all()
# print(stu)
# for i in stu:
#     print(i.name, i.gender, i.phone)

# filter() 条件查询
# stu = Student.query.filter(Student.gender == "女")
# print(stu)
# for i in stu:
#     print(i.name, i.id,i.gender)


# filter_by() 比较类似SQL的查询  first() 查询到的第一个
# stu = Student.query.filter_by(name="张三").first()
# print(stu)
# print(stu.name, stu.id, stu.gender)


# stu = Student.query.filter_by(name="张三").filter(Student.id <= 2)
# print(stu)
# for i in stu:
#     print(i.name, i.id)

# 改
# 第一种
# stu = Student.query.filter(Student.id == 1).update("name": "张毅1")# 返回动了多少条数据
# db.session.commit()
# print(stu)


# stu = Student.query.filter(Student.gender == "男").update("gender": "女")  # 返回动了多少条数据
# print(stu)
# db.session.commit()

# 第二种
# 匹配一个出来,修改
# stu = Student.query.get(1)
# print(stu.name,stu.gender)
# stu.gender = "男"
# db.session.add(stu)
# db.session.commit()
# print(stu.name,stu.gender)

# 匹配第一个修改
# stu = Student.query.filter(Student.gender == "男").first()
# print(stu.name,stu.gender)
# stu.gender = "女"
# db.session.add(stu)
# db.session.commit()
# print(stu.name,stu.gender)

# 修改全部
# stu = Student.query.filter(Student.gender == "女").all()
# for i in stu:
#     i.gender = "男"
#     db.session.add(i)
# db.session.commit()


# 删
#
# stu = Student.query.filter(Student.id >= 5).delete()  # 返回动了多少条数据
# print(stu)
# db.session.commit()

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

# print("--------------------------")

# grade1 = Grade(grade=100, student_id=1)
# grade2 = Grade(grade=95, student_id=1)
#
# db.session.add(grade1)
# db.session.add(grade2)
# db.session.commit()

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

# grade = Grade.query.filter(Grade.student_id == 1).all()
# for i in grade:
#     print(i.student_id, i.student, i.student.name)

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


# 通过 多 访问 一

# grade = Grade.query.filter(Grade.grade == "100").all()
# for i in grade:
#     print(i.student.name,i.student.gender)


# 多对多
# student0 = Student(name="李玲", gender="女", phone="12345678900")
# student1 = Student(name="李依", gender="女", phone="12345678901")
# student2 = Student(name="李贰", gender="男", phone="12345678902")
# student3 = Student(name="李叁", gender="男", phone="12345678903")
# student4 = Student(name="李斯", gender="男", phone="12345678904")
# student5 = Student(name="李舞", gender="女", phone="12345678905")
# student6 = Student(name="李榴", gender="男", phone="12345678906")
# student7 = Student(name="李淇", gender="女", phone="12345678907")
# student8 = Student(name="李巴", gender="男", phone="12345678908")
# student9 = Student(name="李玖", gender="男", phone="12345678909")
#
# teacher0 = Teacher(name="老数", gender="男", phone="12345678910")
# teacher1 = Teacher(name="老语", gender="女", phone="12345678911")
# teacher2 = Teacher(name="老英", gender="女", phone="12345678912")
# teacher3 = Teacher(name="老物", gender="男", phone="12345678913")
# teacher4 = Teacher(name="老化", gender="男", phone="12345678914")
# teacher5 = Teacher(name="老生", gender="男", phone="12345678915")
#
# course0 = Course(name="数学")
# course1 = Course(name="语文")
# course2 = Course(name="英语")
# course3 = Course(name="物理")
# course4 = Course(name="化学")
# course5 = Course(name="生物")
#
# db.session.add_all(
#     [student0, student1, student2, student3, student4, student5, student6, student7, student8, student9, teacher0,
#      teacher1, teacher2, teacher3, teacher4, teacher5, course0, course1, course2, course3, course4, course5])
# db.session.commit()

# for i in range(1, 7):
#     c = Course.query.filter(Course.id == i).update("teacher_id": i)
# db.session.commit()


# 查询课程表
# 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)
# print(stu.courses)
#
# print("===================")

# 课程查询学生
# c = Course.query.get(2)
# for s in c.students:
#     print(s.name)

ModuleNotFoundError:没有名为“flask_sqlalchemy.orm”的模块

【中文标题】ModuleNotFoundError:没有名为“flask_sqlalchemy.orm”的模块【英文标题】:ModuleNotFoundError: No module named 'flask_sqlalchemy.orm' 【发布时间】:2020-05-30 16:22:13 【问题描述】:

在 CS50 的 Python 和 JavaScript 2018 网络编程课程中,我遇到了 ModuleNotFoundError: No module named 'flask_sqlalchemy.orm' 错误。我试图导入scoped_session,sessionmaker。请问有什么解决办法吗?

【问题讨论】:

试试这个***.com/questions/51620139/… 这能回答你的问题吗? ImportError: No module named 'flask_sqlalchemy' w/ 2 Versions of Python Installed 【参考方案1】:

从 sqlalchemy.orm 导入 scoped_session, sessionmaker

【讨论】:

以上是关于flask_sqlalchemy的主要内容,如果未能解决你的问题,请参考以下文章

flask_sqlalchemy

如何在 flask_sqlalchemy 中查询 ScalarListType

初学flask_sqlalchemy

flask_sqlalchemy 调用存储过程

No module named 'flask_sqlalchemy'

flask_sqlalchemy join的正确使用方法