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