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) #此后的代码都不执行
Flask--orm
猜你喜欢
转载自blog.csdn.net/weixin_44111377/article/details/92760654
今日推荐
周排行