• 欢迎大家分享资料!前往留言板评论即可!

手把手教你写一个flask项目第二篇——数据库操作

合宙 模组资料网 2年前 (2021-05-15) 654次浏览 0个评论 扫描二维码
文章目录[隐藏]

一、通过第三方包操作数据库

手把手教你写一个flask项目第二篇——数据库操作
第一步,安装第三方包

pip install pymysql

第二步,建立数据库链接

import pymysql

# 打开数据库连接
db = pymysql.connect(host='****', user='root', database='****', password='****')

第三步,创建游标对象

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

第四步,执行sql

# 使用 execute()  方法执行 SQL 查询
cursor.execute("SELECT VERSION()")

# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()

第五步,关闭数据库链接

# 关闭数据库连接
db.close()

但是,在flask项目中,我们并不这样做。因为使用第三方包直接操作sql会比较麻烦,还需要书写复杂的sql语句。对于写过sql的朋友都知道,稍微写错一点点,可能需要找很久才能找到错误位置。

二、通过flask sqlalchemy操作数据库

第一步,通过flask配置mysql数据库

   SQLALCHEMY_DATABASE_URI='mysql://%s:%s@%s/%s' % ("user", "password", "host", "database")

第二步,创建数据库模型类

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

    def __repr__(self):
        return '<User %r>' % self.username

第三步,增改查

新增一个用户

@app.route('/add_user/<user_name>', methods=['GET'])
def index(user_name):
    db.create_all()
    user_obj = User(username=user_name, age=18)
    db.session.add(user_obj)
    db.session.commit()
    return make_response(jsonify({'code': 0, 'msg': ''}))

查询一个用户

@app.route('/query_user/<query_str>', methods=['GET'])
def query_user(query_str):
    user_query_obj = User.query.filter(User.username.like('%'+query_str+'%')).all()
    data = []
    for item in user_query_obj:
        data.append(item.to_dict())
    return make_response(jsonify({'code': 0, 'data': data, 'msg': ''}))

修改一个用户

@app.route('/modify_user/<user_id>/<new_name>', methods=['GET'])
def modify_user(user_id, new_name):
    user_query_obj = User.query.filter_by(id=user_id).first()
    user_query_obj.username = new_name
    db.session.commit()
    return make_response(jsonify({'code': 0, 'msg': ''}))

源码
手把手教你写一个flask项目第二篇——数据库操作

三、总结

一、SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升
二、解耦,面向不同数据库,使用相同的代码


喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址