首先进行安装配置
提示报错 app配置
#数据库链接地址
app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:[email protected]:3306/flask_test'
#自动追踪数据库的修改
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=True
然后重启解决这个提示错误。
接下来开始创建模型
创建模型的语法
语法: class MODELNAME(db.Model):
__tablename__ = ‘TABLENAME’
COLUMN_NAME = db.Column(db.TYPE,OPTIONS)
1.MODELNAME:定义模型类名称,根据表名设定
2.TABLENAME:映射到数据库中表的名字
3.COLUMN_NAME:属性名,映射到表中列的名字
4.db.TYPE:映射到列的数据类型
5.OPTIONS:列选项.
创建完成之后我们这个表怎么创建成功呢?
在指定的路由执行一个命令
# db.create_all()创建表的命令
# db.drop_all() 删除表的命令
会自动创建模型中对应的表
以上是创建单个表的操作方式
如果表结构是一对多中间,怎么创建呢?
以一个用户表和文章表为例 代码如下:
#创建用户模型 class Users(db.Model): id=db.Column(db.Integer,primary_key=True) uname=db.Column(db.String(20),unique=True,nullable=False) pwd=db.Column(db.String(150),nullable=False) sex=db.Column(db.String(2),nullable=False) mob=db.Column(db.String(11),nullable=False,unique=True) imgs=db.Column(db.String(100),nullable=True) create_time=db.Column(db.DATETIME,default=datetime.now) articles=db.relationship('Article',backref='user')
#创建文章模型 class Article(db.Model): aid=db.Column(db.Integer,primary_key=True) title=db.Column(db.String(100),unique=True,nullable=False) abstract=db.Column(db.String(200),nullable=False) thumb_img=db.Column(db.String(200),nullable=False) content=db.Column(db.Text,nullable=True) status = db.Column(db.Integer, nullable=False,default=1) clicks = db.Column(db.Integer, nullable=False,default=500) create_time=db.Column(db.DATETIME,default=datetime.now) uid=db.Column(db.Integer,db.ForeignKey(Users.id))
以上表没有加 tablename属性,默认表名生成使用类名小写生成
其中用户表 是一的一方 要添加一个映射关系
articles=db.relationship('Article',backref='user') 这个是什么意思呢?
可以在进行连表查询的时候,用户表要取对应文章表中的数据,可以通过users模型中articles属性取到,相反如果查的是文章表你要获取对应的用户表中的信息你可以通过文章表中的users属性取到(有一个关键的就是文章表中的 外键------多的一方对应的添加一个外键将两张表关联起来 --不然backref='user')对应是查不到的哦。
看一下前台文章显示 页面
比如我要显示文章信息
不用说作者信息在user表文章信息是在文章表中我在后端是怎么查的呢?
通过这样的方式就可以查到,但是上面操作是没有原生中的连表哦,直接可以获取到的
看下模板中是如何遍历数据的?
创建模型语法