欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > ORM操作(flask)

ORM操作(flask)

2025/3/15 8:43:05 来源:https://blog.csdn.net/qq_45742976/article/details/146267416  浏览:    关键词:ORM操作(flask)

目录

    • ORM操作
      • 连表操作

ORM操作

# 1. 创建ORM对象  
user = User(username="test", password="123456", email="123@qq.com")  
# 2. 将ORM对象添加到db.session数据库会话中  
db.session.add(user)  
# 提交会话,将db.session中的改变同步到数据库  
db.session.commit()

封装成类方法:

@classmethod  
def create_comm(cls, content, user_id, work_id):  comm = Comment(content=content, user_id=user_id, work_id=work_id)  db.session.add(comm)  db.session.commit()  return commcomm = Comment.create_comm(content, user_id, work_id)

db.session.delete(user)
db.session.commit()

封装成实例方法:

def del_work(self):  db.session.delete(self)  db.session.commit()work = db.session.query(Work).get(work_id)  
if not work:  return error_response("作品不存在!")  
work.del_work()

user.name = new_name
db.session.commit()

封装成实例方法:

def update_username(self, new_name):  self.username = new_name  db.session.commit()  return selfuser.update_username(new_name)

# 根据主键查询,返回一个对象
user = User.query.get(user_id)
user = db.session.query(User).get(user_id)# 根据某一字段查询,返回一个对象
user = db.session.query(User).filter_by(username="test").first()# 列出表里所有数据,返回一个列表
works = db.session.query(Work).all()# 查询符合条件的数据数量
total_count = db.session.query(Work).filter(Work.title.contains("test")).count()

封装成类方法:

# 类方法
@classmethod  
def get_work_by_title(cls, title):  return cls.query.filter(cls.title.contains(title)).all()works = Work.get_work_by_title(title)

连表操作

定义作品表

class Work(db.Model):  # 定义表名  __tablename__ = "work"  # 定义关键字  # 关键字=db.Column(数据类型(长度),primary_key是否主键,autoincrement是否自增,nullable是否可以为空)  work_id = db.Column(db.Integer, primary_key=True, autoincrement=True)  title = db.Column(db.String(100), nullable=False)  content = db.Column(db.Text)  # 添加作者的外键  author_id = db.Column(db.Integer, db.ForeignKey("user.user_id"))  # backref会自动给User模型添加一个works的属性,用来获取文章列表,另一张表就不需要写此配置  author = db.relationship("User", backref="works")  # 设置发布时间  pub_date = db.Column(db.DateTime, default=datetime.now)

定义类别表,以及作品-类别中间表

work_category = db.Table('work_category',  db.Column('cate_id', db.Integer, db.ForeignKey('category.cate_id'), primary_key=True),  db.Column('work_id', db.Integer, db.ForeignKey('work.work_id'), primary_key=True)  
)  class Category(db.Model):  __tablename__ = "category"  cate_id = db.Column(db.Integer, primary_key=True, autoincrement=True)  cate_name = db.Column(db.String(200), nullable=False, unique=True)  # 关联work表,删除work时会将work_category表里的对应数据删除  works = db.relationship('Work', secondary=work_category, backref='categories')  def get_works_by_category_id(self):  return self.works  def get_work_count(self):  return len(self.works)

根据类别查询作品

category = db.session.query(Category).get(category_id)
works = category.get_works_by_category_id()
total = category.get_work_count()

作品类下面加一个删除功能的实例方法

class Work(db.Model):  # 定义表名  __tablename__ = "work"  # 定义关键字  # 关键字=db.Column(数据类型(长度),primary_key是否主键,autoincrement是否自增,nullable是否可以为空)  work_id = db.Column(db.Integer, primary_key=True, autoincrement=True)  title = db.Column(db.String(100), nullable=False)  content = db.Column(db.Text)  # 添加作者的外键  author_id = db.Column(db.Integer, db.ForeignKey("user.user_id"))  # backref会自动给User模型添加一个works的属性,用来获取文章列表,另一张表就不需要写此配置  author = db.relationship("User", backref="works")  # 设置发布时间  pub_date = db.Column(db.DateTime, default=datetime.now)def del_work(self):  db.session.delete(self)  db.session.commit()

删除接口

@work_bp.route("/del/<int:work_id>", methods=['DELETE'])  
@login_reqired  
def work_del(work_id):  work = db.session.query(Work).get(work_id)  if not work:  return error_response("作品不存在!") work.del_work()  data = {"work_id": work_id}  return generate_response(data=data, message="作品删除成功!")

当删除作品时,能自动将作品-类别表里对应的数据删除
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词