相关模型的Build Model.query

2024-02-02

我需要构建一个查询,列出所有用户、最好的朋友和朋友总数。该列表必须按用户拥有的好友总数排序。

我希望生成的查询具有以下结构:

users.id | users.userName | users.userEmail | users.userPhone | totalFriends | bestFriends.userName | bestFriends.user_id

Example:

1 | Alex   | [email protected] /cdn-cgi/l/email-protection     | 900102030 | 2 | Carlos | 2
2 | Carlos | [email protected] /cdn-cgi/l/email-protection | 900102030 | 1 | Alex   | 1
3 | Sara   | [email protected] /cdn-cgi/l/email-protection     | 900102030 | 1 | None   | None
4 | Jack   | [email protected] /cdn-cgi/l/email-protection     | 900102030 | 0 | None   | None

这是我的模型:

from app import db
from sqlalchemy.orm import relationship, backref
from sqlalchemy import Table, Column, Integer, ForeignKey
from sqlalchemy.ext.declarative import declarative_base

class users(db.Model):

    __tablename__ = "Users"

    id = db.Column(db.Integer, primary_key=True)
    userName = db.Column(db.String, nullable=False)
    userEmail = db.Column(db.String, nullable=False)
    userPhone = db.Column(db.String, nullable=False)
    userPass = db.Column(db.String, nullable=False)



    def __init__(self, userName, userEmail, userPhone, userPass):

        self.userName = userName
        self.userEmail = userEmail
        self.userPhone = userPhone
        self.userPass = userPass

    def __repr__(self):
        return '{}-{}-{}-{}'.format(self.id, self.userName, self.userEmail, self.userPhone)




class friendships(db.Model):

    __tablename__ = "Friendships"

    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('Users.id'), nullable=False)
    friend_id = db.Column(db.Integer, db.ForeignKey('Users.id'), nullable=False)


    userR = db.relationship('users', foreign_keys='friendships.user_id')
    friendR = db.relationship('users', foreign_keys='friendships.friend_id')


    def __init__(self, user_id, friend_id):


        self.user_id = user_id
        self.friend_id = friend_id


    def __repr__(self):
        return '{}-{}-{}-{}'.format(self.user_id, self.friend_id)



class bestFriends(db.Model):

    __tablename__ = "BestFriends"

    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('Users.id'), nullable=False)
    best_friend_id = db.Column(db.Integer, db.ForeignKey('Users.id'), nullable=False)

    user = db.relationship('users', foreign_keys='bestFriends.user_id')
    best_friend = db.relationship('users', foreign_keys='bestFriends.best_friend_id')


    def __init__(self, user_id, best_friend_id):

        self.user_id = user_id
        self.best_friend_id = best_friend_id


    def __repr__(self):
        return '{}-{}-{}-{}'.format(self.user_id, self.best_friend_id)

我不想使用 db.session,因为我想使用 Model.query 中的 .paginate。我如何构造这个查询?

我构建了一个查询,收集我想要的结构,但没有我确实需要的 bestFriends 名称:

userList = users.query.add_columns(bestFriends.best_friend_id, db.func.count(friendships.user_id).label("total")).outerjoin(friendships, users.id==friendships.user_id).group_by(users.id).outerjoin(bestFriends, users.id==bestFriends.user_id).order_by(db.func.count(friendships.user_id).desc()).paginate(page, 5, false)

这允许我在 jinja 方面执行以下操作:

<div id="innerContent">
{% if userList.items %}
     {% for user in userList.items %}
            <div class="contentUsers">
                {{ user.users.userName }}|{{ user.total }}|{{ user.best_friend_id }}

这使:

id|  name  |Number friends| best friend id when exists 
1 | Alex   | 2            |  2                         
2 | Carlos | 1            |  1
3 | Sara   | 1            |
4 | Jack   | 0            |

如何定位 bestFriends.userName?


我添加了与您的模型的关系,如下所示:

class users(db.Model):
    __tablename__ = "Users"
    id = db.Column(db.Integer, primary_key=True)
    userName = db.Column(db.String, nullable=False)

    friends = association_proxy(
        '_friends', 'friend',
        creator=lambda v: friendships(friend=v),
    )

    best_friend = db.relationship(
        'users',
        secondary='BestFriends',
        primaryjoin='users.id==bestFriends.user_id',
        secondaryjoin='users.id==bestFriends.best_friend_id',
        uselist=False,
        backref=db.backref('best_friend_of', uselist=False),
    )


class friendships(db.Model):
    __tablename__ = "Friendships"

    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('Users.id'), nullable=False)
    friend_id = db.Column(db.Integer, db.ForeignKey('Users.id'), nullable=False)

    user = db.relationship(users, foreign_keys=user_id, backref='_friends')
    friend = db.relationship(users, foreign_keys=friend_id)


class bestFriends(db.Model):
    __tablename__ = "BestFriends"

    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('Users.id'), nullable=False)
    best_friend_id = db.Column(db.Integer, db.ForeignKey('Users.id'))

添加了一些测试数据:

# add data
u1, u2, u3, u4 = _users = [
    users(userName=_un)
    for _un in ('Alex', 'Carlos', 'Sara', 'Jack')
]
u1.friends.append(u2)
u1.friends.append(u3)
u2.friends.append(u4)
u3.friends.append(u1)

u1.best_friend = u2
u2.best_friend = u1
db.session.add_all(_users)
db.session.commit()

之后获取查询就非常容易了:

# create query
user_bf = db.aliased(users, name='user_bf')
userList = (
    users.query
    .add_column(db.func.count(friendships.user_id).label("total"))
    .add_column(user_bf.id.label("best_friend"))
    .add_column(user_bf.userName.label("best_friend_name"))
    .outerjoin(friendships, users.id == friendships.user_id)
    .outerjoin(user_bf, users.best_friend)
    .group_by(users.id)
    .order_by(db.func.count(friendships.user_id).desc())
    .paginate(1, 10, False)
)
for user in userList.items:
    print(user)

但我可能会删除最好的朋友的表并将其直接添加到users table.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

相关模型的Build Model.query 的相关文章

  • Ajax 调用后使用 Django 模板呈现 JSON 对象

    我一直在尝试了解什么是最佳方法Ajax http en wikipedia org wiki Ajax 28programming 29 in Django http en wikipedia org wiki Django 28web f
  • Python中使用cv2获取当前视频播放位置

    我正在尝试使用 CV2 和 Python 从播放视频中获取当前播放时间位置 如果可能 以毫秒为单位 目前我正在使用此示例代码来播放视频文件 import cv2 import numpy as np file name 2 mp4 wind
  • Python 按文件夹模块导入

    我有一个目录结构 example py templates init py a py b py a py and b py只有一个类 名称与文件相同 因为它们是猎豹模板 纯粹出于风格原因 我希望能够在中导入和使用这些类example py像
  • Python - 包和设置文件

    我有一个 python 包 需要从我的项目目录中提取设置 这是我的项目当前的结构 Project bin mypackage package files Project myproject project files start py se
  • 如何在 pygame 中聚焦光线或如何仅绘制窗口的某些圆形部分?

    对于这一点 如果您熟悉它 请想想 超级马里奥制造2 中嘘关卡中的黑暗模式 我试图在角色周围创建一个圆形聚光灯 这也将使圆圈范围内的任何内容都可见 例如部分站在地板上 敌人或场景中的任何其他物体 我的计划是首先绘制圆圈 聚光灯 然后绘制场景
  • 更改Python pylab玫瑰/极坐标图中图例标题的字体大小

    我正在尝试更改玫瑰图或 极地 图上现有图例标题的字体大小 大部分代码是由不在的其他人编写的 我已经添加 ax legend title legend title setp l get title fontsize 8 添加标题 legend
  • numpy 数组最快的保存和加载选项

    我有一个生成二维的脚本numpy数组与dtype float和形状的顺序 1e3 1e6 现在我正在使用np save and np load对数组执行 IO 操作 然而 这些函数对于每个数组都需要几秒钟的时间 是否有更快的方法来保存和加载
  • 使用子图绘制 pandas 数据框 (subplots=True):放置图例并使用紧凑的布局

    我真的很喜欢 pandas 来处理和分析大数据集 到目前为止 我主要使用 matplotlib 进行绘图 但现在想使用 pandas 自己的绘图功能 基于 matplotlib 因为它需要更少的代码 并且在大多数情况下对我来说似乎足够了 尤
  • Python 函数可能会引发哪些异常? [复制]

    这个问题在这里已经有答案了 Python 中有什么方法可以确定 内置 函数可能引发哪些异常 例如 文档 http docs python org lib built in funcs html http docs python org li
  • 如何抑制 pyinstaller 生成的可执行文件窗口中的所有警告

    我已经使用 pyinstaller 从 python 文件生成了可执行文件 该程序按其应有的方式工作 但在我想隐藏的窗口中出现了一条警告消息 当 python 文件在 IDE 中运行时 以下行会抑制所有警告消息 warnings filte
  • 为图例中的点设置固定大小

    我正在制作一些散点图 我想将图例中的点的大小设置为固定的相等值 现在我有这个 import matplotlib pyplot as plt import numpy as np def rand data return np random
  • 在 Docker 容器内运行时,如何自动在 API 路由文件中进行 FASTAPI 拾取更改?

    我通过 docker 运行 FastApi 在 docker compose 中创建一个名为 ingestion data 的服务 我的 Dockerfile FROM tiangolo uvicorn gunicorn fastapi p
  • 如何将时间间隔划分为不同长度的部分?

    我有一个从 0 到t 我想把这个区间分成一个以2 25 2 25 1 5为周期的累积序列 方法如下 input start 0 stop 19 output sequence 0 2 25 4 5 6 8 25 10 5 12 14 25
  • 尝试修复我的功能

    我正在开发一个函数 我必须返回一个元组 其中第一个参数是最大数字的 str 第二个参数是 int 列表 这是示例以及我为该函数编写的内容 投票 G G N G C G 1 3 0 1 您必须将最大值的位置映射到正确的一方 parties N
  • 多线程写入文件

    前几天刚开始使用 python 对多线程的整个概念还很陌生 我在多线程时写入文件时遇到问题 如果我按照常规方式执行此操作 它会不断覆盖正在写入的内容 使用 5 个线程写入文件的正确方法是什么 不降低性能的最佳方法是在所有线程之间使用队列 每
  • 仅对某些行的不同大小的两个 pandas 数据帧的列进行求和

    我有两个 pandas 数据框 如下所示 df1 n column1 0 5 0 0 0 1 6 0 0 0 2 7 0 0 0 3 8 0 0 0 4 9 0 0 0 5 10 0 0 0 df2 n column2 0 6 0 1 0
  • 如何从python导入路径中删除当前目录

    我想使用 Mercurial 存储库hg本身 也就是说 我克隆了 Mercurialhttps www mercurial scm org repo hg https www mercurial scm org repo hg并想运行一些h
  • 使用 Pandas 和 Group By 绘制堆叠直方图

    我正在使用如下所示的数据集 Gender Height Width Male 23 4 4 4 Female 45 4 4 5 我想可视化高度和宽度的堆叠直方图 我希望每个图有两个堆叠的直方图 每个性别一个 这是文档中的堆叠直方图 如果存在
  • Python请求401错误但url在浏览器中打开

    我正在尝试从这个位置提取 json https www nseindia com api option chain indices symbol BANKNIFTY https www nseindia com api option cha
  • PyQt QFileDialog exec_ 很慢

    我正在使用自定义QFileDialog因为我想选择多个目录 但是exec 功能非常慢 我不明白为什么 我正在使用最新版本的 PyQt 代码片段 from PyQt4 import QtGui QtCore QtNetwork uic cla

随机推荐

  • Kotlin 数据类的扩展函数

    我有一个数据类 看起来像这样 data class SuggestionResponse val metadata Metadata val response Response data class Response blah blah d
  • Laravel / Eloquent 模型属性可见性

    以前我使用的 ORM 将数据库列直接映射到类属性 这允许您特定的属性可见性 就像您通常限制对某些属性的访问一样 密码 使用 Eloquent 我似乎无法复制这一点 因为数据库列映射到不包含可见性的内部属性数组 我的愿望是将用户密码的访问范围
  • 在 Pandas DataFrame 中的字符串内漂亮地打印换行符

    我有一个 Pandas DataFrame 其中一列包含字符串元素 而这些字符串元素包含我想按字面打印的新行 但它们只是表现为 n在输出中 也就是说 我想打印这个 pos bidder 0 1 1 2 2 3 lt alice lt bob
  • Google API/获取目录联系人

    我需要从谷歌企业目录列表中获取联系人 电话列表 我尝试过 Google Contacts api 它对 我的联系人 下的所有联系人都可以正常工作 但不允许显示 目录 联系人 我有什么用途 如何访问这些联系人 公司联系人 要将用户添加到全局地
  • 跨活动访问领域数据库

    我有 3 项不同的活动 1 扩展了此活动中配置的应用程序和领域 2 数据从第二个活动添加到领域 3 数据将在第三个活动中显示 我无法完成第三部分 我无法在第三个活动中获取 Realm 实例 以下是应用程序 我提到的第一个活动 Overrid
  • Azure 物联网中心反馈接收器 ReceiveAsync 非常慢(15 秒)高延迟

    如果我通过 IoT 中心发送消息 Cloud 2 设备 var serviceMessage new Message Encoding ASCII GetBytes Hello Device serviceMessage Ack Deliv
  • 帮助创建带有弯曲标题部分的 HTML 页面

    我想知道 创建一个顶部标题部分看起来是斜角而不是直角的网页的最佳方法是什么 使用 html css 和图形 请参阅下图作为示例 我不确定如何使用图像 以便它们根据不同的浏览器大小 分辨率扩展 收缩 有人能给我一些帮助吗 或者也许给我指出一个
  • 如何知道我的 Android 设备上是否存在传感器?

    我想知道我的 Android 设备上是否存在传感器 例如加速度计 我正在处理 SensorManager 类 这是我正在使用的代码 sensorMgr SensorManager getSystemService SENSOR SERVIC
  • 由于命名空间为空,Python XPath lxml 无法读取 SVG 路径元素?

    我有一个 SVG Xml 文件 我想从中选择一些元素 为了 MCRE 我已将文件缩减为以下内容
  • pip install 语法允许不安全

    我试着跑 pip install upgrade allow insecure setuptools 但似乎不起作用 我的语法错误吗 这是在 ubuntu 13 10 上 我需要 allow insecure 因为我无法获得 公司代理 SS
  • 移动 Highstock 导航器位置

    是否可以将 Highstock 图表导航器从图表底部移至顶部 是的 这是可能的 请看示例 http jsfiddle net jBUGN http jsfiddle net jBUGN navigator top 40
  • php.ini 不允许我禁用_functions

    我把它放在 php ini 文件中 disable functions popen exec system passthru proc open shell exec show source phpinfo 但我仍然可以调用它们 测试了 e
  • 从 Excel 导入到数据表,跳过最后一列值

    我正在尝试将数据从 Excel 文件导入到数据表 但问题是最后一列值被跳过 其余列的值是完美的 我的 Excel 文件包含以下内容 导入后数据表中的数据如下 我的代码如下 Dim connExcel As New OleDbConnecti
  • 如何加快从栅格中提取缓冲区中土地覆盖类型比例的速度?

    我想提取 10 公里缓冲区中大约 30 000 个 SpatialLines 类对象的空间数据 并计算缓冲线周围每种土地覆盖类型的比例 我第一次使用这个功能crop裁剪我的光栅 然后 我使用了该功能extract 包栅格 计算 10 种土地
  • 我想要为我的第一个可可应用程序提供一个漂亮的自定义窗口[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我是一名图形设计师 转型为网页设计师 转型为网页开发人员 目前正在尝试转型为 Mac 开发人员 我的第一个应用程序即将完成 这是一个非常非
  • 用范围替换连续数字

    如何在单元格中查找连续数字 并将其替换为范围 例如 改变 1 3 5 15 16 17 25 28 29 31 to 1 3 5 15 17 25 28 29 31 这些数字已经排序 即按升序排列 Thanks 我想看看一个有趣的问题 无需
  • 如何在 XAML 中使用枚举类型?

    我在学习WPF时遇到了以下问题 我在 XAML 之外的另一个命名空间中有一个枚举类型 public enum NodeType Type SYSTEM 1 System Type DB 2 Database Type ROOT 512 Ro
  • mockito - 模拟接口 - 抛出 NullPointerException

    我在模拟后也收到空指针异常 请找到我的项目结构 this is the pet interface public interface Pet An implementation of Pet public class Dog extends
  • 在java中读取Doc或Docx文件的问题[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我在阅读时
  • 相关模型的Build Model.query

    我需要构建一个查询 列出所有用户 最好的朋友和朋友总数 该列表必须按用户拥有的好友总数排序 我希望生成的查询具有以下结构 users id users userName users userEmail users userPhone tot