1、创建关联模型类(一对多)
from flask import Flask
app = Flask(__name__)
class Config():
DEBUG = True
# 数据类型://登录用户:登录密码@数据库IP或地址:端口/数据库名
SQLALCHEMY_DATABASE_URI = 'mysql://root:123@127.0.0.1:3306/flaskDemo'
# 动态追踪修改设置,如未设置只会提示警告
SQLALCHEMY_TRACK_MODIFICATIONS = True
#查询时会显示原始SQL语句
SQLALCHEMY_ECHO = True
app.config.from_object(Config)
# 数据库初始化
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy(app)
# 创建模型
class User(db.Model):
"""用户"""
# 模型相关声明
__tablename__ = "user"
# 模型字段信息
id = db.Column(db.Integer, primary_key=True,autoincrement=True,comment="ID")
name = db.Column(db.String(20), index=True, comment="用户名")
age = db.Column(db.Integer, nullable=True, comment="年龄")
sex = db.Column(db.Boolean, default=True, comment="性别")
created_time = db.Column(db.DateTime, comment="创建时间")
role = db.Column(db.SmallInteger, db.ForeignKey("role.id") ) # role.id 是表名和表字段名
# 自定义模型操作方法
def __repr__(self):
"""当把模型输出时,展示的内容"""
return "%s" % self.name
class Role(db.Model):
"""角色"""
__tablename__ = "role"
id = db.Column(db.SmallInteger, primary_key=True, comment="ID")
name = db.Column(db.String(20), index=True, comment="角色名")
# 注意,这个user_list不是字段,不会在创建表的时候,加入到数据中,这个字段是ORM自己处理的。User是上面定义的模型类,若该模型类在本文件中定义,则可不加引号;若该模型类是导包过来的,则需要加引号。(建议都加引号)
user_list = db.relationship("User", backref='myrole')
def __repr__(self):
return "%s" % self.name
2、查询
正向查询:
从 user 表中查角色名,使用Role模型中定义的 backref进行正向查询角色名
user = User.query.filter(User.name=="22").first() # 查询name=“22”的信息,user为对象
role = Role.query.filter(Role.name=="金牌会员").first() # role为name=“金牌会员”的对象
print(user,user.role) # 查询的只是role的id,不能查到角色名
# 使用Role模型中定义的 backref进行正向查询角色名
print(user.myrole)
正向查询
从 role 表查询 id=1 的角色名使用的 user
反向查询:
从 user 表中查角色名
反向查询:
从 role 表查询 name=“金牌会员” 的角色名使用的 user
posted on
浙公网安备 33010602011771号