做网站的重点目标,设计网站大全湖南岚鸿设计,网站宣传工作,网站建设公司广告我们来继续上次的内容#xff0c;实现将数据插入数据库。 我们先更改下models.py#xff0c;由于上次笔误#xff0c;把外键关联写错了。在这里给大家说声抱歉。不过竟然没有小伙伴发现。 models.py
from app import dbclass User(db.Model): # 表名将会是 user#xff0… 我们来继续上次的内容实现将数据插入数据库。 我们先更改下models.py由于上次笔误把外键关联写错了。在这里给大家说声抱歉。不过竟然没有小伙伴发现。 models.py
from app import dbclass User(db.Model): # 表名将会是 user自动生成小写处理id db.Column(db.Integer, primary_keyTrue, autoincrementTrue) # 主键name db.Column(db.String(20)) # 用户名# 给这个article模型添加一个author属性关系表User为要连接的表backref为定义反向引用# lazy表示禁止自动查询后面可以直接操作这个对象。只可以用在一对多和多对多关系中不可以用在一对一和多对一中articles db.relationship(Article, backrefdb.backref(user), lazydynamic)class Article(db.Model):# 也可以自定义表名__tablename__ article# id 主键 自增id db.Column(db.Integer, primary_keyTrue, autoincrementTrue)# 文章标题 非空title db.Column(db.String(100), nullableFalse)# 文章正文 非空content db.Column(db.Text, nullableFalse)# 关联表这里要与相关联的表的类型一致, user.id 表示关联到user表下的id字段author_id db.Column(db.Integer, db.ForeignKey(user.id))接着我们在根目录下创建一个scripts文件夹用来存放我们一些脚本文件。在scripts文件夹下新建一个insert_sql.py用来插入测试数据。 insert_sql.py
from app import db
from models import User, Articledef insert_data():username clannadhharticles [{title: 石正丽新研究:需持续监控蝙蝠, detail: 石正丽新研究:需持续监控蝙蝠},{title: 建议增设火车青年票, detail: 建议增设火车青年票},{title: 审议现场人大代表张伯礼哭了, detail: 审议现场人大代表张伯礼哭了},{title: 31省区市首次确诊病例0新增, detail: 31省区市首次确诊病例0新增},{title: 世界首个新冠疫苗人体临床数据, detail: 世界首个新冠疫苗人体临床数据},]# 新建一个用户user User(nameusername)db.session.add(user)# 提交db.session.commit()# 从测试数据中添加文章。for article in articles:article_post Article(author_iduser.id, titlearticle[title], contentarticle[detail], )db.session.add(article_post)# 提交db.session.commit()if __name__ __main__:insert_data()然后我们运行 python insert_sql.py 测试数据来源于我们上节课的内容。 我们查看下article表可以看到数据已经插入了。 我们接着看下user表。可以看到新增了一个用户clannadhh。 我们再更改下app.py
import osfrom flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy # 导入扩展类import modelsbasedir os.path.abspath(os.path.dirname(__file__))app Flask(__name__)app.config[SQLALCHEMY_DATABASE_URI] sqlite:/// os.path.join(basedir, blog.db)
app.config[SQLALCHEMY_TRACK_MODIFICATIONS] Falsedb SQLAlchemy(app) # 初始化扩展传入程序实例 appapp.route(/)
def index():user models.User.query.first() # 查询第一个用户因为我们只有一个用户articles models.Article.query.filter_by(author_iduser.id) # 根据用户ID查询文章return render_template(article/list.html,usernameuser.name,articlesarticles)if __name__ __main__:app.run()记得修改list.html。将 {{ article.detail}} 改为 {{ article.content }}。 接着打开链接 http://127.0.0.1:5000。可以看到文章渲染出来了。 上面我们简单对数据库进行了操作下面给大家送上一些基本操作的总结。 读取
from models import User, Article # 导入模型类
article Article.query.first() # 获取Article模型的第一条记录
article.user # 获取该文章的作者
User 1
article.user.name # 获取该文章的作者的名字
clannadhh
article.title # 获取文章标题
石正丽新研究:需持续监控蝙蝠
article.content # 获取文章内容
石正丽新研究:需持续监控蝙蝠
Article.query.all() # 查询所有的文章
[Article 1, Article 2, Article 3, Article 4, Article 5]
Article.query.count() # 统计文章的数量
5
Article.query.get(1) # 获取id为1的文章
Article 1
Article.query.filter_by(author_id1) # 查询用户id为1的文章
flask_sqlalchemy.BaseQuery object at 0x000002889475BCC0
Article.query.filter_by(author_id1).first() # 查询用户id为1的文章的第一条记录
Article 1
Article.query.filter(Article.author_id1).first() # 查询用户id为1的文章的第一条记录
Article 1 下面是一些常用的过滤方法 过滤方法 说明 filter() 使用指定的规则过滤记录返回新产生的查询对象 filter_by() 使用指定规则过滤记录以关键字表达式的形式返回新产生的查询对象 order_by() 根据指定条件对记录进行排序返回新产生的查询对象 group_by() 根据指定条件对记录进行分组返回新产生的查询对象 下面是一些常用的查询方法 查询方法 说明 all() 返回包含所有查询记录的列表 first() 返回查询的第一条记录如果未找到则返回None get(id) 传入主键值作为参数返回指定主键值的记录如果未找到则返回None count() 返回查询结果的数量 first_or_404() 返回查询的第一条记录如果未找到则返回404错误响应 get_or_404(id) 传入主键值作为参数返回指定主键值的记录如果未找到则返回404错误响应 paginate() 返回一个Pagination对象可以对记录进行分页处理 今天的内容就到这里想了解什么记得给我留言。