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()          




猜你喜欢

转载自blog.csdn.net/xhg_wandering_soul/article/details/80517901