使用Flask-SQLAlchemy管理数据库

Posted McHades

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Flask-SQLAlchemy管理数据库相关的知识,希望对你有一定的参考价值。

SQLAlchemy 是一个很强大的关系型数据库框架, 支持多种数据库后台。 提供了高层 ORM,也提供了使用数据库原生 SQL 的低层功能。

安装Flask-SQLAlchemy

&emsp&emsp首先,激活virtualenv虚拟环境,在虚拟环境安装目录的同级目录下使用命令

venv\Scripts\activate

命令行前出现virtualenv 则表示激活成功

&emsp&emsp然后,安装Flask-SQLAlchemy

pip install flask-sqlalchemy

配置SQLite数据库

from flask.ext.sqlalchemy import SQLAlchemy

basedir = os.path.abspath(os.path.dirname(__file__))

app = Flask(__name__)
app.config[‘SQLALCHEMY_DATABASE_URI‘] =‘sqlite:///‘ + os.path.join(basedir, ‘data.sqlite‘)
app.config[‘SQLALCHEMY_COMMIT_ON_TEARDOWN‘] = True

db = SQLAlchemy(app)

db 对象:是 SQLAlchemy 类的实例,表示程序使用的数据库,同时还获得了 Flask-SQLAlchemy
提供的所有功能。
SQLALCHEMY_DATABASE_URI :程序使用的数据库 URL
SQLALCHEMY_COMMIT_ON_TEARDOWN:将其设为 True 时,每次请求结束后都会自动提交数据库中的变动

定义模型

在 ORM 中,模型一般是一个 Python 类,类中的属性对应数据库表中的列。

class User(db.Model):
    __tablename__ = ‘users‘
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), unique=True, index=True)

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

__tablename__:定义在数据库中使用的表名。如果没有定义 tablename,Flask-SQLAlchemy 会使用一个默认名字。
其余的类变量都是该模型的属性,被定义为 db.Column类的实例。db.Column 类构造函数的第一个参数是数据库列和模型属性的类型。

操作数据库

创建表

让 Flask-SQLAlchemy 根据模型类创建数据库。方法是使用 db.create_all() 函数:

(venv) $ python hello.py shell
>>> from hello import db
>>> db.create_all()

查看程序目录,会发现新建了一个名为 data.sqlite 的文件。如果数据库表已经存在于数据库中,那么 db.create_all()不会重新创建或者更新这个表。如果修改模型后要把改动应用到现有的数据库中,这一特性会带来不便。粗暴的解决方式是先删除再重建使用>>> db.drop_all()>>> db.create_all(),数据库里的数据也会被删除。所以使用Flask-Migrate插件,这个插件对数据库迁移框架Alembic 做了轻量级包装,并集成到 Flask-Script 中,所有操作都通过 Flask-Script 命令完成。接下来的操作前提是安装并使用了Flask-Migrate。

查询

模型名.query.all()取对应表中的所有记录:

>>> User.query.al
[<User u‘john‘>]

可通过查看原生语句查看该表的字段

>>> str(User.query.filter_by(username=‘john‘))
‘SELECT users.id AS users_id, users.email AS users_email, users.username AS users_username, users.role_id AS users_role_id, users.password_hash AS users_password_hash, users.confirmed AS users_confirmed \nFROM users \nWHERE users.username = ?‘

可以看到模型User对应的表users中的字段有,id, email, username, role_id等

修改

先取到数据再修改然后将修改存回表中

>>> User.query.get(1)
<User u‘john‘>

>>> u=User.query.get(1)  #取数据

>>> print u.email
[email protected]

>>> u.email=‘[email protected]‘  #修改数据
>>> db.session.add(u)     #添加
>>> db.session.commit()  #提交修改
>>> u.email                     #查看修改后数据
u‘[email protected]

删除

>>> db.session.delete(u)
>>> db.session.commit()

插入行

>>> u = User(email=‘[email protected]‘, username=‘john‘, password=‘cat‘)
>>> db.session.add(u)
>>> db.session.commit()




以上是关于使用Flask-SQLAlchemy管理数据库的主要内容,如果未能解决你的问题,请参考以下文章

学习 Python Flask+Django web 框架 使用Flask-SQLAlchemy管理数据库 遇到的难题

一周掌握Flask框架学习笔记Flask中使用数据库(使用Flask-SQLAlchemy管理数据库)

在python3下怎样用flask-sqlalchemy对mysql数据库操作

在python3下怎样用flask-sqlalchemy对mysql数据库操作

FLASK-SQLALCHEMY如何使用or和and条件进行组合查询

Flask-SQLAlchemy:用户角色模型和关系