一、通过第三方包操作数据库
第一步,安装第三方包
第二步,建立数据库链接
1 2 3 4
| import pymysql
db = pymysql.connect(host='****', user='root', database='****', password='****')
|
第三步,创建游标对象
第四步,执行sql
1 2 3 4 5
| cursor.execute("SELECT VERSION()")
data = cursor.fetchone()
|
第五步,关闭数据库链接
但是,在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': ''}))
|
源码
三、总结
一、SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升
二、解耦,面向不同数据库,使用相同的代码