PythonWeb框架-使用Flask框架操作数据库

本文介绍了如何在Flask应用中使用Flask-SQLAlchemy和pymysql进行数据库操作,包括配置数据库连接、创建表模型、执行查询(排序、分页)、添加、删除和修改记录。通过实例展示了CRUD操作的Python代码实现。
摘要由CSDN通过智能技术生成

第1关:查询操作

知识点

1.Flask操作数据库有两种方式,一种是使用Flask-sqlalchemy模块实现,另一种是直接使用pymysql模块,通过编写sql语句操作数据库。

2.文件结构

flask_edu
├── app
|   ├── __init__.py
|   ├── models.py  # 数据模型文件
|   ├── templates  # 用于存储html文件的文件夹
├── config.py    # 配置文件
└── test.py   # 操作数据库的文件

(1)config.py:实现连接数据库功能;(使用SQL语句实现时不需要配置)

(2)__init__.py:创建Flask实例,使config.py文件生效;

(3)models.py:数据库表模型,实训关系对象映射;

(4)test.py:设置路由以及编写查询语句等操作文件。

3.常用过滤器:

名称说明
filter()把过滤器添加到原查询上,返回一个新查询
filter_by()把等值过滤器添加到原查询上,返回一个新查询
limit()使用指定的值限制原查询返回的结果数量,返回一个新查询
offset()偏移原查询返回的结果,返回一个新查询
order_by()根据指定条件对原查询结果进行排序,返回一个新查询
group_by()根据指定条件对原查询结果进行分组,返回一个新查询

编程要求

message表结构与数据如下:

列名说明类型
id表id(自动递增,主键)int
provincename省名varchar
cityname省会名varchar
ct用户数量int

请仔细阅读右侧代码,根据方法内的提示,在Begin-End区域内进行代码补充,具体任务如下:

  • 首先完成config.py文件,实现对数据库的连接,数据库名为webMysql用户名为root,密码为123123
  • 完成models.py文件实现表模型的创建;
  • 完成test.py文件实现查询根据用户数量降序排序之后的结果,降序可以使用DESC方法。
#config.py
class Config(object):
    #连接数据库
    # ********* Begin *********#
    SQLALCHEMY_DATABASE_URI='mysql+pymysql://root:123123@localhost:3306/web?charset=utf8'
    SQLALCHEMY_TRACK_MODIFICATIONS=True
    # ********* End *********#
#models.py
from app import db

class Message(db.Model):
    #表模型
    #********* Begin *********#
    id=db.Column(db.Integer,primary_key=True,autoincrement=True)
    provincename=db.Column(db.String(255))
    cityname=db.Column(db.String(255))
    ct=db.Column(db.Integer)
    #********* End *********#
#test.py
from app import db,app
from models import Message
from flask import render_template

@app.route("/select")
def select():
    '''
    首先根据ct这一列进行序排序
    然后将每一列的数据转换成一个列表
    '''
    # ********* Begin *********#
    result = Message.query.order_by(Message.ct.desc()).all()
    province = list(map(lambda x:x.provincename,result))
    city = list(map(lambda x:x.cityname,result))
    count = list(map(lambda x:x.ct,result))
    # ********* End *********#
    return render_template("index.html",city=city,count=count, province=province)
@app.route("/")
def home():
    return render_template("home.html")
 
if __name__ == "__main__":
    app.run(debug = True,host="0.0.0.0",port=8080)

第2关:增加操作

编程要求

message表结构:

列名说明类型
id表id(自动递增,主键)int
provincename省名varchar
cityname省会名varchar
ct用户数量int
  • 按照要求完成config.py文件的连接数据库以及models.py文件表模型的创建;
  • test.py文件中使用request.form()获取POST请求的表单数据(后台会自动发送一个POST请求,表单内容为纽约州 纽约市 1205);
  • 将获取下来的数据添加到数据库中。
#config.py
class Config(object):
    #连接数据库
    # ********* Begin *********#
    SQLALCHEMY_DATABASE_URI='mysql+pymysql://root:123123@localhost:3306/web?charset=utf8'
    SQLALCHEMY_TRACK_MODIFICATIONS=True
    # ********* End *********#
#models.py
from app import db

class Message(db.Model):
    #表模型
    # ********* Begin *********#
    id=db.Column(db.Integer,primary_key=True,autoincrement=True)
    provincename=db.Column(db.String(255))
    cityname=db.Column(db.String(255))
    ct=db.Column(db.Integer)  
    # ********* End *********#
#test.py
from app import app,db
from models import Message
from flask import Flask,render_template,request,redirect

@app.route('/insert',methods=['GET','POST'])
def insert():
    #进行添加操作
    # ********* Begin ********* #
    newMessage = Message(provincename='纽约州',cityname="纽约市",ct=1205)
    db.session.add(newMessage)
    db.session.commit()
    # ********* End ********* #
    return redirect('/')

@app.route("/insert_page")
def insert_page():
    #跳转至添加页面
    return render_template("insert.html")

@app.route("/")
def home():
    listCity = Message.query.order_by(Message.id.desc()).all()
    return render_template("home.html",city_list = listCity)

if __name__ == "__main__":
    app.run(debug=True,host="0.0.0.0", port=8080)

第3关:删除操作

编程要求

message表结构:

列名说明类型
id编号(自动递增,主键)int
provincename省名varchar
cityname省会名varchar
ct用户数量int

测试说明

平台会部署你的服务器,并尝试调用你补全的delete()方法,传入参数为 id = 1

#test.py
from app import db,app
from models import Message
from flask import render_template,redirect,request

@app.route("/delete",methods=['GET'])
def delete():
    #操作数据库删除目标数据   前台传入的参数为  id
    # ********* Begin *********#
    u=Message.query.filter_by(id=1).first()
    db.session.delete(u)
    db.session.commit()
    # ********* End *********#
    #删除完重定向到主页
    return redirect('/')

@app.route("/")
def home():
    listCity = Message.query.order_by(Message.id.desc()).all()
    return render_template("home.html",city_list = listCity)

if __name__ == "__main__":
    app.run(debug = True,host="0.0.0.0",port=8080)
#config.py
class Config(object):
    #连接数据库
    # ********* Begin *********#
    SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:123123@localhost:3306/web?charset=utf8" 
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    # ********* End *********#
#models.py
from app import db

class Message(db.Model):
    #表模型  定义四个字段 id ct provincename cityname
    # ********* Begin *********#
    id=db.Column(db.Integer, primary_key=True)  
    provincename = db.Column(db.String(255))
    cityname = db.Column(db.String(255))
    ct = db.Column(db.Integer)
    # ********* End *********#

第4关:修改操作

编程要求

message表结构:

列名说明类型
id表id(自动递增,主键)int
provincename省名varchar
cityname省会名varchar
ct用户数量int

请仔细阅读右侧代码,使用普通**sql**语句完成任务,在Begin-End区域内进行代码补充,具体任务如下:

  • 首先使用request.form()获取表单数据中的idprovincenamecitynamectid是不可以修改的;
  • 将内蒙古呼和浩特市的用户数修改为10万。
from app import app,db
from models import Message
from flask import render_template
from flask import redirect,request
import pymysql


@app.route("/alter",methods=['POST'])
def alter():
    #接收参数,修改数据
    # ********* Begin *********#
    u=Message.query.filter_by(id=1).first()
    u.ct=100000
    db.session.commit()
    # ********* End *********#
    return redirect('/')

#修改页面
@app.route("/alter_page",methods=['GET'])
def alter_page():
    id = request.args.get("id")
    province = request.args.get("provincename")
    cityname = request.args.get("cityname")
    ct = request.args.get("ct")
    message = Message(id = id,provincename=province,cityname=cityname,ct=ct)
    print(message)
    return render_template("alter.html",message = message)

@app.route("/")
def home():
    listCity = Message.query.order_by(Message.id.desc()).all()
    return render_template("home.html",city_list = listCity)

if __name__ == "__main__":
    app.run(debug=True, host="0.0.0.0", port=8080)

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值