连接数据库 mysql
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app=Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI']=''mysql+pymysql://root:root@127.0.0.1:3306/test'
models.py 文件
db=SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True)
def __init__(self, username, email):
self.username = username
self.email = email
def __repr__(self):
return '<User %r>' % self.username
app.py 文件
# 创建表
db.create_all()
# 添加数据
db.session.add(obj)
db.session.commit()
一对一
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') : 外键关系,
Role.users = db.relationship('User', backref='role') : 代表 外键关系的 面向对象视角. 对于一个 Role 类的实例, 其 users 属性将返回与角色相关联的用户组成的列表.
db.relationship() 第一个参数表示这个关系的另一端是哪个模型.
backref 参数, 向 User 模型添加了一个 role 数据属性, 从而定义反向关系. 这一属性可替代 role_id 访问 Role 模型, 此时获取的是模型对象, 而不是外键的值.
多对多
registrations = db.Table("registrations",
db.Colum("student_id",db.Integer,db.Foreignkey("student")),
db.Colum("class_id",db.Integer,db.Foreignkey("classes")))
class Student(db.Model):
__tablename__="student"
id=db.Column(db.Integer,primary_key=True)
name = db.Column(db.String)
classes =db.relationship("Class",secondary=registrations,
backref="students")
class Classes(db.Model):
__tablename__="classes"
id=db.Column(db.Integer,primary_key=True)
name=db.Column(db.String)
#必须把 secondary 参数设为 关联表.
多对多关系可以在任何一个类中定义, backref 参数会处理好关系的另一侧.
会话管理
db.session.add(object)
db.session.commit()提交
db.session.add_all(iterable)
db.session.delete(obj)