Flask开发基础步骤之四:数据库

1、SQLAlchemy

pip install flask-sqlalchemy

2、Flask-Migrate
是用于处理SQLAlchemy数据库迁移的扩展工具。当Model出现变更的时候,通过migrate去管理数据库变更。Migrate主要有3个动作,init、migrate 和upgrade。

pip install flask-migrate

3、初始化

import os
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

# 设置数据库 URI SQLALCHEMY_DATABASE_URI  变量来告诉 SQLAlchemy 数据库连接地址
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:' + os.path.join(app.root_path, 'da
27
ta.db')

# 如果你使用 Windows 系统,上面的 URI 前缀部分需要写入三个斜线(即  sqlite:/// )

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False  # 关闭对模型修改的监控 
# 在扩展类实例化前加载配置 
db = SQLAlchemy(app)
#绑定app和数据库,以便进行操作
migrate = Migrate(app,db)

4、创建数据库模型
- 模型类要声明继承  db.Model 。
- 每一个类属性(字段)要实例化  db.Column ,传入的参数为字段的类型,下面的表格列出了 常用的字段类。 
- 在  db.Column()  中添加额外的选项(参数)可以对字段进行设置。比如, primary_key  设 置当前字段是否为主键。除此之外,常用的选项还有  nullable (布尔值,是否允许为空 值)、 index (布尔值,是否设置索引)、 unique (布尔值,是否允许重复 值)、 default (设置默认值)等。
```python
class Role(db.Model):  
    __tablename__ = 'roles'    
    id = db.Column(db.Integer, primary_key=True)     
    name = db.Column(db.String(64), unique=True) 
 
     def __repr__(self):
        return '<Role %r>' % self.name 
 
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

5、关系

class Role(db.Model):
    # ... 
    users = db.relationship('User', backref='role') 

class User(db.Model):
    # ... 
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))

传给 db.ForeignKey() 的参数 ‘roles.id’ 表明, 这列的值是 roles 表中相应行的 id 值。

db.relationship() 中的 backref 参数向 User 模型中添加一个 role 属性,从而定义反向关系。通过 User 实例的这个属性可以获取对应的 Role 模型对象,而不用再通过 role_id 外 键获取。

6、常用数据库操作命令

# 删除所有表
db.drop_all()

# 创建所有表
db.create_all()

# 定义表内数据(一行数据)
from hello import Role, User 
admin_role = Role(name='Admin') 
mod_role = Role(name='Moderator') 
ser_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)

# 添加数据(添加一行)
db.session.add(admin_role) 
db.session.add_all([admin_role, mod_role, user_role, ...     user_john, user_susan, user_david])

# 提交修改
db.session.commit()

# 删除数据
db.session.delete(mod_role)
db.session.commit()

# 查询
Role.query.all()

# 使用过滤器可以配置query 对象进行更精确的数据库查询。下面这个例子查找角色为 "User" 的所有用户:
User.query.filter_by(role=user_role).all()



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

steventian72

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值