当前位置:   article > 正文

Flask--orm

Flask--orm
from flask import Flask
# 1.导入模块
from flask_sqlalchemy import SQLAlchemy


app= Flask(__name__)

import os
# 获取绝对路径
BASE_DIR=os.path.abspath(os.path.dirname(__file__))
print(BASE_DIR)

#
# 2.配置数据库连接
class Config(object):
    # 连接数据库
    SQLALCHEMY_DATABASE_URI = 'sqlite:///'+os.path.join(BASE_DIR,'fk.sqlite')
    # 设置sqlalchemy 自动更新
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    # 配置 SECRET_KEY
    SECRET_KEY = 'abev'

app.config.from_object(Config)

# 3.创建sqlalchemy对象
db=SQLAlchemy(app)

# 4.创建数据模型,一对多
# 学科
# 继承db.Model
class Subject(db.Model):
    __tablename__='tb_subject'#设置表格名称
    id=db.Column(db.Integer,primary_key= True) #设置主键
    name=db.Column(db.String(32),nullable=False) #设置名称
    # 定义关系字段,不会再表格中存在,只是为了方便查询
    student=db.relationship('Student',backref='subject')


    def __repr__(self):

        return '<object name:{}>'.format(self.name)



# 学生
class Student(db.Model):
    __tablename__ = 'tb_student'  # 设置表格名称
    id = db.Column(db.Integer, primary_key=True)  # 设置主键
    name = db.Column(db.String(32), nullable=False)  # 设置名称
    subject_id=db.Column(db.Integer,db.ForeignKey('tb_subject.id')) #设置外键

    def __repr__(self):
        return '<object name:{}>'.format(self.name)


if __name__ == '__main__':
	import pymysql
	pymysql.install_as_MySQLdb()

    db.drop_all()   #删除所有的表格
    db.create_all() #创建所有的表格

    # 添加数据:
    #1.创建对象
    subject1=Subject(name='python')
    subject2=Subject(name='java')
    db.session.add(subject1)
    db.session.add(subject2)
    db.session.commit()             #默认开启事务,所以要提交
    #2.创建学生
    std1=Student(name='zs',subject_id=subject1.id)
    std2=Student(name='ls',subject_id=subject1.id)
    std3=Student(name='ww',subject_id=subject2.id)
    std4 = Student(name='ss', subject_id=subject2.id)
    db.session.add_all([std1,std2,std3,std4])
    db.session.commit()

    # 查询
    # 1.查询所有的学科
    # ret=Subject.query.all()
    # print(ret)
    # [<object name:python>, <object name:java>]

    # 2. first() 获取第一条记录
    # ret=Subject.query.first()
    # print(ret)
    # < objectname: python >

    # 3.get():必须是 唯一标识
    # ret=Subject.query.get(2)
    # print(ret)
    # < objectname: python >

    # 4.filter_by
    # ret=Student.query.filter_by(subject_id=1).all()
    # print(ret)
    # [<object name:zs>, <object name:ls>]


    # ret=Student.query.filter_by(subject_id=1,name='zs').all()
    # print(ret)
    # [<object name:zs>]

    # 5.filter:  参数 必须是 类名.属性名=='xxx'
    # ret =Student.query.filter(Student.subject_id==1).all()
    # print(ret)
    # [<object name:zs>, <object name:ls>]

    # 6. or
    # from sqlalchemy import or_
    # ret =Student.query.filter(or_(Student.subject_id==1,Student.name=='ww')).all()
    # print(ret)
    #[<object name:zs>, <object name:ls>, <object name:ww>]


    # 7.select * from limit 2,3;
    # offset() 偏移
    # ret=Student.query.offset(2).all()
    # print(ret)

    # 8.limit()
    # ret = Student.query.offset(2).limit(1).all()
    # print(ret)

    # 9.关联查询
    # 查询python学科对应的学生
    sub_obj =Subject.query.filter_by(name='python').first()
    # print(sub_obj)
    # print(sub_obj.name)
    print(sub_obj.student)
    # <object name:python>
    # python
    # [<object name:zs>, <object name:ls>]

    # 不使用关系属性字段
    sub_obj =Subject.query.filter_by(name='python').first()
    ret =Student.query.filter_by(subject_id=sub_obj.id).all()
    print(ret) #[<object name:zs>, <object name:ls>]

    # 查询张三对应的学科
    # Student_obj=Student.query.filter_by(name='zs').first()
    # ret=Subject.query.get(Student_obj.subject_id)
    # print(ret)
    # <object name:python>

    # 使用关系字段
    # student_obj=Student.query.filter_by(name='zs').first()
    # print(student_obj.subject)
    # < objectname: python >

	#修改
	#将	id=3 改成www
	# Student.query.filter_by(id=3).update({'name':'wwww'})
	# db.session.commit()

	#或者使用get
	#student_obj=Student.query.get(3)
	#student_obj.name='www'
	#db.session.add(student_obj)
	#db.session.commit()

	# 删除操作
	# 删除 id=3 的对象
	# student_obj=Student.query.get(3)
	# db.session.delete(student_obj)
	# db.session.commit()

    # app.run(debug=True)    #此后的代码都不执行
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/540420
推荐阅读
相关标签
  

闽ICP备14008679号