flask数据库管理
Posted icetouch
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flask数据库管理相关的知识,希望对你有一定的参考价值。
1.SQL数据库与NoSQL数据库
SQL数据库由不同的表组成,表和表之间由关系连接。每个表中存在一列主键,主表中的某列可用其他表的主键表示,这样的关系构成关系型数据库。
NoSQL数据库即Not Only SQL,存在不同类型的NoSQL。
2.Flask - SQLAlchemy
(1)初始化
这里我们还是使用SQLAlchemy数据库。
(venv) $pip install flask-sqlalchemy
在Index.py中配置数据库
from flask_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)
数据库中的表用类定义,各个属性即为表的列,各个实例即为表的行:
class User(db.Model) __tablename__ = ‘users‘ , id = db.Colomn(db.Integer , primary_key = True) username = db.Colomn(db.String(64) , unique = True , index = True) role_id = db.Colomn(db.Integer, db.ForeignKey(‘roles.id‘)) def __repr__: return ‘<User %r>‘ % self.username
其中继承db.colomn的变量即为表中的列,示例中定义主键为id,id数据类型为数值型,username列的值不能重复且建立索引,role_id是外键且连接表名为roles的表的id列。
class Role(db.Model): __tablename__ = ‘roles‘ id = db.Colomn(db.Integer , primary_key = True) name = db.Colomn(db.String(64) , unique = True) users = db.relationship(‘User‘ , backref = ‘role‘) def __repr__: return ‘<Role %r>‘ % self.name
此处一个角色很可能有多个用户与其对应,因此其实是一个一对多关系。relationship方法第一个参数设定与其连接的表对应的类,第二个参数backref将在User类中添加role属性,此处role属性可替代role_id的作用,注意此时获取的不是外键的值,而是该实例整体。
在建立了表的基本结构之后,我们在shell中创建表:
(venv) $ python hello.py shell >>> from hello import db >>> db.creat_all()
(2)输入数据
>>> from hello import Role,User
>>> admin_role = Role(name = ‘Admin‘)
>>> mod_role = Role(name = ‘Moderator‘)
>>> user_role = Role(name = ‘User‘)
>>> user_John = User(username = ‘John‘, role = admin_role)
>>> user_Susan = User(username = ‘Susan‘, role = user_role)
>>> user_David = User(username = ‘David‘), role = user_role)
但此时数据尚未写入数据库,只存在与Python中:
>>> print(admin_role.id) None
首先写入数据库会话
>>> db.session.add(admin_role) >>> db.session.add(mod_role) ... ...
或
>>> db.session.add_all([admin_role,mod_role,user_role,user_John,user_Susan,user_David])
提交会话(保存到数据库):
>>> db.session.commit()
(3)编辑数据
修改数据即将数据重新提交一遍:
>>> admin_role.name = ‘Administrator‘ >>> db.session.add(admin_role) >>> db.session.commit()
删除数据:
>>> db.session.delete(mod_rate)
>>> db.session.commit()
-
以上是关于flask数据库管理的主要内容,如果未能解决你的问题,请参考以下文章