Flask使用mysql数据库

来源:互联网 发布:java jdbc 编辑:程序博客网 时间:2024/05/18 00:47

我使用的数据库框架为: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 SQLAlchemyimport pymysqlapp = 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"] = Trueapp.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = Truedb = 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()都能自行找到关系中的外键,若无法决定外键,我们就要自己为它提供额外参数来确定所使用的外键。








0 0
原创粉丝点击