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数据库管理的主要内容,如果未能解决你的问题,请参考以下文章

Flask小demo---代码统计系统

12_关于flask中的宏

python flask_Sqlalchemy管理数据库

Flask之模板之宏继承包含

python flask(多对多表查询)

YASnippet - emacs 的代码片段管理工具