一、通过第三方包操作数据库
第一步,安装第三方包
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': ''}))
源码
三、总结
一、SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升
二、解耦,面向不同数据库,使用相同的代码