首页 > 数据库技术 > 详细

flask数据库管理

时间:2018-04-30 00:50:15      阅读:229      评论:0      收藏:0      [点我收藏+]

 

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数据库管理

原文:https://www.cnblogs.com/icetouch/p/8948119.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!