Flask-SQLAlchemy中,定义ORM一对多关系模型

        ORM全拼 Object-Relation Mapping,意为对象-关系映射,主要实现模型对象到关系数据库的数据映射。使用模型对象映射可以避免我们直接去面向数据库进行操作,不用去编写各种sql语句。
实现了数据模型与数据库的解耦, 屏蔽了不同数据库操作上的差异.(下面模型以MySQL数据库为例)
在项目中我们一般用的最多的就是一对多的数据模型。下面是一个一对多模型创建的简单模板:
# 导入模块
from flask import Flask
# 导入flask_sqlalchemy 的扩展包
from flask_sqlalchemy import SQLAlchemy 


#设置连接 app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:mysql@localhost/test' #设置动态追踪,一般不设置只会警告,不会报错 app.config['SQLALCHEMY_TRACK_MODELFICTIONS']=True
#实例化SQLALCHEMY对象 db = SQLAlchemy(app)

#定义模型类-作者类
class Author(db.Model):    __tablename__='authors'    id = db.Column(db.Integer,primary_key=True)    name = db.Column(db.String(32),unique=True)
#设置relationship属性方法,建立模型关系,第一个参数为多方模型的类名,添加backref可以实现多对一的反向查询     au_book = db.relationship('Book',backref='author')     def __repr__(self):        return "book:%s" % self.name
 
#定义模型类-图书类 class Book(db.Model): __tablename__='books' id = db.Column(db.Integer,primary_key=True) name = db.Column(db.String(32),unique=True) #设置外键指向一方的主键,建立关联关系 author_id = db.Column(db.Intrger,db.Foreignkey='author.id') def __repr__(self): return "book:%s" % self.name
#入口函数
if __name__ == "main":

   db.drop_all() #这两句代码不能出现在正式开发项目中,尤其是删除表的操作,一定要谨慎
db.create_all()
#在这里以准备要添加的数据了
#准备作者类数据添加
    au1 = Author(name='曹雪芹')
    au2 = Author(name='隔壁老王')
    au3 = Author(name='罗贯中')
   #将数据添加到会话中
    db.session.add_all([au1,au2,au3]) 
    #提交到数据库中
    db.session.commit()
#准备图书类数据添加
    bk1 = Book(name='红楼梦',author_id =au1.id )
    bk2 = Book(name='如何变成美男子',author_id =au2.id)
    bk3 = Book(name='如何更快征服美少女',author_id =au2.id)
    bk3 = Book(name='西游记',author_id =au3.id)
   #将数据添加到会话中
    db.session.add_all([au1,au2,au3]) 
    #提交到数据库中
    db.session.commit()
    
   app.run()          




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值