Flask使用mysql数据库

本文介绍如何使用Flask-SQLAlchemy进行数据库操作,包括安装配置、定义模型及设置关系等核心步骤。

我使用的数据库框架为:Flask-SQLAlchemy,它是一个Flask扩展,这个扩展包装了SQLAlchemy,支持多种数据库后台。

1.Flask-SQLAlchemy

Flask-SQLAlchemy安装:pip install flask-sqlalchemy

安装完成之后,还需要安装pymysql(pymysql是python中操作mysql的模块):pip install pymysql

在Flask-SQLAlchemy中,数据库使用URL指定,MySQL的url为:mysql://username:password@hostname/database。因为Flask-SQLAlchemy默认使用的是mysqldb,而我使用的是pymysql,所以url还需要指定pymysql,即:mysql+pymysql://username:password@hostname/database。

URL必须配置到Flask配置对像的SQLALCHEMY_DATABASE_URI中

hello.py中配置数据库:

from flask_sqlalchemy import SQLAlchemy
import pymysql

app = Flask(__name__)
app.config["SECRET_KEY"] = "hard to guess"
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:123456@localhost:3306/test"
app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"] = True
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True

db = SQLAlchemy(app)

2.定义模型

模型:程序使用的持久化实体。模型一般是一个Python类,类中的属性对应数据库中的列。

如:数据库test有两个表:role和users

role表中有两个属性,分别是id 和 name,它存储的是可用的用户角色。

users表中有四个属性,分别为:id username password role_id,其中role_id为外键,关联到role表中。它存储的是用户信息。

hello.py中定义模型:


class Role(db.Model):
    __tablename__ = "role"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100))

    def __repr__(self):
        return '<Role %r>' % self.name

    users = db.relationship('User', backref="role")

class User(db.Model):
    __tablename__ = "users"
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(100))

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

    role_id = db.Column(db.Integer, db.ForeignKey('role.id'))


__table__name变量指的是数据库中使用的表名。

3.关系

users = db.relationship('User', backref="role") 和 role_id = db.Column(db.Integer, db.ForeignKey('role.id'))这两个语句说明了这两个表的关系。
db.relationship()中backref参数向User模型中添加一个role属性,从而定义反向关系。这一属性可替代role_id访问Role模型,此时获取的是模型对象,而不是外键的值。
大多数情况下,db.relationship()都能自行找到关系中的外键,若无法决定外键,我们就要自己为它提供额外参数来确定所使用的外键。










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值