Flask入门–SQLALchemy连接并操作数据库

这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战

Flask-SQLALchemy

定义

Flask-SQLAlchemy为流行的SQLAlchemy包 提供了一个Flask-friendly包装器,其致力于简化在Flask中SQLALchemy的使用,是一个ORM。ORM允许应用程序使用 高级实体 (如类、对象、方法)而不是 表和SQL 来管理数据库,它的工作是将高级操作转换为数据库命令。实现了关系数据库和python对象的映射,舍弃了一些性能开销,换取了较大的开发效率提升,和开发人员的便利。

安装Flask-SQLALchemy并连接数据库

Flask-SQLAlchemy的安装直接通过命令行pip install flask-sqkalchemy进行安装。

如果使用的是mysql数据库的话可能还需要安装mysqldb驱动:pip install flask-mysqldb

安装完成后使用Flask-SQLALchemy进行连接数据库,具体操作为:

先新建一个flask对象:app = Flask( __ name __ ,static_url_path='/'),接着在新建的flask对象的config中填下数据库的url,具体格式为: '数据库://登录用户:密码@ip地址:端口/数据库名'.

相关语句如下:

  • app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@localhost:3306/ss_flask'
  • sqlite:////tmp/test.db
  • mysql://username:password@server/db

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
如果设置成 True (默认情况),Flask-SQLAlchemy 将会追踪对象的修改并且发送信号。这需要额外的内存, 如果不必要的可以禁用它。

设置完这些参数后,实例化数据库管理对象: db = SQLAlchemy(app),实例化后运行若没有报错即和数据库可以正常连接。

操作数据库

创建数据库表

介绍完了Flask-SQLAlchemy,接下来我们来讲讲如何进行数据库操作。

首先创建一个类,然后再在里面定义相应的字段。

class User(db.Model):
    __tablename__ = 'User_table'
    username = db.Column(db.String(80), unique=True)
    pw_hash = db.Column(db.String(80))
    id = db.Column(db.Integer,primary_key=True)
复制代码

定义好后,进行创建: db.create_all(),完成后可以看见如下结果:

image.png

完整代码:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__,static_url_path='/')
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@localhost:3306/test'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)  # 实例化对象

class User(db.Model):
    __tablename__ = 'User_table'
    username = db.Column(db.String(80), unique=True)
    pw_hash = db.Column(db.String(80))
    id = db.Column(db.Integer,primary_key=True)


db.create_all()

if __name__ == '__main__':
    app.run()
复制代码

插入

插入:flask-sqlalchemy操作数据库插入数据,先是实例化一个User对象,然后再把该对象传入,如果报错就回滚,反正提交,并关闭连接(关闭连接db.session.close()很重要,若不及时关闭会导致数据库的连接一直被占用,影响性能)。

def add():
    user = User(username='aaa',pw_hash="123",id=1)
    try:
        db.session.add(user)
    except:
        db.session.rollback()
    db.session.commit()
    db.session.close()
复制代码

image.png

删除

删除的操作和插入操作都比较类似,具体语句是:db.session.query(对象名).filter(对象名.字段名=某个值).delete(),db.session.query() 是查询语句,其中filter() 是用于过滤的函数。

例子:

def del_user():
    try:
        db.session.query(User).filter(User.id==1).delete()
    except:
        db.session.rollback()
    db.session.commit()
    db.session.close()
复制代码

image.png

结语

今天的flask教程到此结束,喜欢的话请点个赞哦!