python-flask-mysql完整web项目

公众号:不会写代码的阿P

项目源码在文章最下方—>

项目结构:

python-flask-mysql完整web项目

1.数据库连接池

通过pip插入数据驱动依赖 pip install flask-sqlalchemypip install pymysql

1.1配置数据源(config.py)

DIALECT = 'mysql'
DRIVER = 'pymysql'
USERNAME = 'root'
PASSWORD = '123321'
HOST = '127.0.0.1'
PORT = '3306'
DATABASE = 'tdata'
​
mysql 不会认识utf-8,而需要直接写成utf8
SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT, DRIVER, USERNAME, PASSWORD, HOST, PORT,
                                                                       DATABASE)
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ECHO = True

1.2引用Orm框架(exts.py)

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

1.3启动文件中注册(app.py)

from flask import Flask
引用数据库启动文件
from mapper.exts import db
引用数据库配置文件
import config
引用数据库
from controller.user_controller import *
​
app = Flask(__name__)
app.config.from_object(config)
db.init_app(app)
​
app.register_blueprint(user, url_prefix="/user")
​
if __name__ == '__main__':
    app.run(debug=True)

项目和数据库文件下载地址:https://gitee.com/hahaguai007/python-flask-mysql

2.数据库操作

通过Flask提供的orm框架对数据库进行操作

2.1增加

@user.route('/add//')
def add_user(username, pwd):
    print(username, pwd)
    userinfo = User(username=username, pwd=pwd)
    db.session.add(userinfo)
    db.session.commit()
    return jsonify("ADD_SUCCESS")

2.2删除

两种写法

第一种
user1 = User.query.filter().first()
print(user1.id)
db.session.delete(user1)
db.session.commit()
第二种
user2 = User.query.filter(User.id==2).delete()
db.session.commit()

2.3修改

user1 = User.query.filter(User.id == id).first()
    user1.username = "我是修改后的"
    db.session.merge(user1)
    db.session.commit()

2.4查询

@user.route('/list')
def list_users():
    users = User.query.all()
    print(users)
    users_output = []
    for user in users:
        users_output.append(user.to_json())
    return jsonify(users_output)

2.4.1条件查询

如果不足请自行补充

1.filter_by和filter

两种写法根据版本的不同: filter_by: 用于查询简单的列名,不支持比较运算符 filterfilter_by的功能更强大,支持比较运算符,支持 or_in_等语法。

  1. data = UserInfo.query.filter(UserInfo.name==’1′).all()
  2. data = UserInfo.query.filter_by(name=’1′).all()
1.  根据用户名查询符合条件的第一条数据
User.query.filter_by(username=username).first()
print("查询1:", user1.to_json())

2. 查询名字结尾字符为g的所有数据[开始/包含]
User.query.filter(User.username.endswith('g')).all()
User.query.filter(User.username.contains('g')).all()
​
3. 查询名字不等于wang的所有数据[2种方式]
 from sqlalchemy import not_
注意了啊:逻辑查询的格式:逻辑符_(类属性其他的一些判断)
User.query.filter(not_(User.username=='yang')).all()
User.query.filter(User.username!='yang').all()
​
4. 查询名字和邮箱都以 li 开头的所有数据[2种方式]
from sqlalchemy import and_
User.query.filter(and_(User.username.startswith('li'), User.email.startswith('li'))).all()
User.query.filter(User.username.startswith('li'), User.email.startswith('li')).all()
​
5. 查询password是 123456 或者 emailitheima.com 结尾的所有数据
from sqlalchemy import or_
User.query.filter(or_(User.pwd=='123456', User.email.endswith('tiantian.com'))).all()
​
6. 查询id为 [1, 3, 5, 7, 9] 的用户列表
User.query.filter(User.id.in_([1, 3, 5, 7, 9])).all()
​
7. 查询name为liu的角色数据 关系引用
举例 暂时没有
User.query.filter_by(username='liu').first().role.name
​
8.获取第一条记录
User.query.first()
  • 根据用户名查询
#根据用户名查询
    user2 = User.query.filter_by(username=username)
    print("查询2:", user1.to_json())
  • 匹配用户名开头为1的用户
匹配用户名开头为1的用户
users = User.query.filter(User.username.startswith('1')).all()
print(users)
users_output = []
for user3 in users:
    users_output.append(user3.to_json())
    print("查询3:", users_output)
  • 根据ID查询

get方法没有数据返回None,不像django一样报错;只能id、查询,并且只能通过id的值查询,或者用ident=1

根据ID查询
user = User.query.get(userid)
print(user.to_json())

2.排序

  • 升序

两种写法根据版本的不同:

  1. data = UserInfo.query.order_by(UserInfo.id).all() # 按照id升序
  2. data = UserInfo.query.order_by(“id”).all()

  3. 降序

两种写法根据版本的不同:

  1. data = UserInfo.query.order_by(UserInfo.id.desc()).all() # 按照id降序
  2. data = UserInfo.query.order_by(db.desc(“id”)).all() # 按照id降序
排序
    user_list = User.query.order_by("username")
    print(user_list)
    users_output_list = []
    for user4 in user_list:
        users_output_list.append(user4.to_json())
    print("查询4:", users_output_list)

3.区间查询

 # 查询TOP3
    user_list1 = User.query.limit(3).all()
    print(user_list1)
    users_output_list1 = []
    for user5 in user_list1:
        users_output_list1.append(user5.to_json())
    print("查询5:", users_output_list1)

2.5分页查询

  • 方式一:使用offset和limit( .offset(offset).limit(limit))
  • 方式二:paginate分页支持( .paginte(page=2,per_page=1)

Pagination的对象:

  • has_prev/has_next——是否有上一页/下一页
  • Items——当前页的数据列表
  • prev_num/next_num——上一页/下一页的页码
  • total——总记录数
  • pages——总页数

http请求:127.0.0.1:5000/user/loadUserPage/2/1

@user.route('/loadUserPage//')
def list_user(page, per_page):
    """ 用户分页 """
    # 每一页的数据大小-per_page 页码-page
    # 1. 查询用户信息
    user = User.query
    # 2. 准备分页的数据
    print(page, per_page)
    user_page_data = user.paginate(page, per_page=per_page)
    users_output = []
    for user in user_page_data.items:
        users_output.append(user.to_json())
    print("当前页的数据列表", users_output)
    print("是否有上一页", user_page_data.has_prev)
    print("是否下一页", user_page_data.has_next)
    print("上一页的页码", user_page_data.prev_num)
    print("下一页的页码", user_page_data.next_num)
    print("总记录数", user_page_data.total)
    print("总页数", user_page_data.pages)
    return jsonify(users_output)
""" 输出
当前页的数据列表 [{'pwd': '2', 'id': 2, 'username': '2', 'nick': '2'}]
是否有上一页 True
是否下一页 True
上一页的页码 1
下一页的页码 3
总记录数 7
总页数 7
"""

https://gitee.com/hahaguai007/python-flask-mysql

Original: https://blog.csdn.net/weixin_39570423/article/details/115489651
Author: 请叫我彦祖
Title: python-flask-mysql完整web项目

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/747784/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球