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

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

image.png
第一步,安装第三方包

1
pip install pymysql

第二步,建立数据库链接

1
2
3
4
import pymysql

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

第三步,创建游标对象

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

第四步,执行sql

1
2
3
4
5
# 使用 execute()  方法执行 SQL 查询
cursor.execute("SELECT VERSION()")

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

第五步,关闭数据库链接

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

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

二、通过flask sqlalchemy操作数据库

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

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

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

1
2
3
4
5
6
7
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

第三步,增改查

新增一个用户

1
2
3
4
5
6
7
@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': ''}))

查询一个用户

1
2
3
4
5
6
7
@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': ''}))

修改一个用户

1
2
3
4
5
6
@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': ''}))

源码
image.png

三、总结

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

上次更新 2021-02-04