(flask)-sqlalchemy查询,必须导入所有模型

2023-12-05

我对 Flask 和 Flask-SQLAlchemy 有一个问题,对于任何查询,我都需要导入所有相关模型。

现在我的 auth.views.py 看起来像这样(编程的前几行所以只是一个测试视图)

from flask import jsonify                                                   

from . import auth                                                          
from app.models.user import User                                            


@auth.route('/', methods=['GET'])                                            
def index():                                                                 
    users = User.query.all()                                                     
    return jsonify({'name': users[0].name}) 

现在我收到一个错误

“InvalidRequestError:初始化映射器Mapper | User | user时,表达式'课程'无法找到名称(“名称'课程'未定义”)。如果这是类名,请考虑将此relationship()添加到类之后两个依赖类都已定义。”

我有一个项目,其中有一个像这样的模型包

app                                                                         
├── auth                                                                    
│   ├── __init__.py                                                         
│   └── views.py                                                            
├── __init__.py                                                             
└── models                                                                  
    ├── assignment.py                                                       
    ├── base.py                                                             
    ├── client.py                                                           
    ├── course.py                                                           
    ├── __init__.py                                                         
    ├── submission.py                                                       
    └── user.py    

我的用户类有多对多的课程和一对多的提交。

这是通过导入课程(然后是提交,然后是其中的关系,最终基本上是所有模型)来解决的。

在 Pyramid 项目中,我们也使用 SQLAlchemy,但我从来不需要导入所有模型来完成我的工作。有什么想法吗?我真的无法弄清楚这一点,而且我也无法用谷歌搜索它。

用户看起来像这样

user_course = db.Table(                                                     
    'user_course', db.Model.metadata,                                          
    db.Column('student_id', UUID, db.ForeignKey('user.id'),                    
              primary_key=True),                                               
    db.Column('course_id', UUID, db.ForeignKey('course.id'),                   
              primary_key=True)                                                
)                                                                              


class User(db.Model):                                                          
    id = db.Column(UUID, default=lambda: str(uuid.uuid4()), primary_key=True) 
    firstname = db.Column(db.String(100), nullable=False)                      
    lastname = db.Column(db.String(100), nullable=False)                       
    insertion = db.Column(db.String(15))  # tussenvoegsel                      
    # email = db.Column(db.String, nullable=False, unique=True)                
    password_hash = db.Column(db.String, nullable=False)                       

    enrolled_courses = db.relationship('Course', secondary=user_course,        
                                       backref='students')                     
    managed_courses = db.relationship('Course', backref='teacher')             

    submissions = db.relationship('Submission', backref='student')             

    @property                                                                  
    def name(self):                                                            
        return "{}{}{}".format(                                                
            self.firstname + " ",                                              
            self.insertion + " " if self.insertion else "",                    
            self.lastname                                                      
        )                                                                      

    @property                                                                  
    def password(self):                                                        
        raise AttributeError("Password is not a readable attribute")           

    @password.setter                                                           
    def password(self, password):                                              
        self.password_hash = bcrypt.hashpw(password, bcrypt.gensalt(12))       

    def verify_password(self, password):                                       
        return bcrypt.hashpw(password, self.password_hash) == \                
            self.password_hash    

如果你真的想坚持每类一个文件的方案,在我看来,更干净的选择是在模型包 init 中进行导入:

models/__init__.py:

from user import User
from client import Client
from course import Course
# plus your remaining classes

然后你可以将类导入为

from models import User

这使得事情更具可读性,并且允许将每个类一个文件的方案与包含多个类的模块混合,同时仍然能够以“平面”方式从models.

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

(flask)-sqlalchemy查询,必须导入所有模型 的相关文章

随机推荐

  • 设备向上/向下和侧向倾斜会触发方向通知

    我有一个针对 iOS7 的应用程序构建 其中 UIViewController 应该支持横向左右和纵向 纵向上下颠倒 其他 ViewController 应该仅支持横向左右方向 我已使用通知来通知方向更改并相应地刷新子视图 我还在检查 UI
  • 如何使用XSLT仅获取某些行和某些列?

    如何使用 XSLT 转换此 XML 文件
  • 从 iPhone 应用程序拨打电话 [重复]

    这个问题在这里已经有答案了 可能的重复 从我的应用程序中拨打 iPhone 电话 我想通过 iPhone 应用程序拨打给定号码 您能建议任何最好的教程来解释它或告诉我这个过程吗 你可以试试 NSURL phoneNumberURL NSUR
  • 单击展开包含详细信息和摘要标签

    我正在使用单击展开折叠使用
  • 将文件内容读入ArrayList

    在之前的项目中 我需要将文件内容读取到数组中 现在我必须做同样的事情 只是我必须将内容读入 ArrayList 我遇到的几个问题是 如何逐步浏览 ArrayList 并分别添加每个项目 如果文件包含超过 10 个输入 则必须退出 我已经尝试
  • 如何在 Java 中并行运行某些东西?

    我正在尝试打印一个范围内的所有可能的组合 例如 如果我的lowerBound是 3 我的max是 5 我想要以下组合 5 4 5 3 4 3 我已经用这个实现了helper 下面找到的函数 当然 如果我的最大值很大 则需要很多组合 这将需要
  • 需要帮助使用泰勒级数逼近Python中的正弦函数

    我对 Python 很陌生 我正在尝试使用近似正弦函数this series 我的代码如下所示 import math def sin x n sine 0 for i in range n sign 1 i sine sine x 2 0
  • 测试一个数字是否是斐波那契数

    我知道如何制作斐波那契数列 但我不知道如何测试给定的数字是否属于斐波那契数列 我想到的一种方法是生成斐波那契数列 数字到该数字并查看它是否属于该数组 但必须有另一种更简单 更快的方法 有任何想法吗 一个非常好的测试是 N 是斐波那契数当且仅
  • 如何使用命令提示符连接到 mysql 服务器:错误

    我正在使用以下命令使用命令提示符连接到数据库 mysql mysql h localhost u test ptest test 但我收到以下错误 ERROR 1064 42000 You have an error in your SQL
  • Laravel 资源中的附加数据

    我使用控制器中的 Laravel 资源 data Project limit 100 gt get return response gt json ProjectResource collection data 我喜欢将附加信息传递给 Pr
  • Android:检查活动是否被系统从服务中销毁

    我有一项服务监听来自服务器的一些事件 服务有 START STICKY 标志 当它被操作系统杀死时 该标志使他重新启动 当服务收到事件时 我有两种情况 首先 如果活动没有被终止 我需要将结果发送到本地广播接收器并更新 UI 其次 如果它被操
  • 添加表单操作[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 当我提交时我试图再次转到index php page servers 但是当我提交表单时重定向是index php 但实际上是index php page servers 我该如何解决
  • Chrome 扩展:检测 Google 文档中的按键

    嘿 我和我的朋友们刚接触 javascript 并且遇到了一些代码问题 目前 我们正在尝试制作一个 Chrome 扩展 通过检测击键来检测用户何时以及对特定 google 文档进行了多少操作 我们当前的方法涉及创建一个 按键 事件监听器 我
  • Codeigniter SMTP 无法连接

    我正在使用 Codeigniter 3 并且我的网站上有一个简单的联系表 此联系表单在我的本地主机 XAMPP 环境中完美运行 但在我的共享 Web 托管 BT 上却不起作用 我无法弄清楚问题是什么 我一直在与他们的支持人员联系 显然 如果
  • site_url() 在 codeigniter 框架中无法正常工作

    以下代码对于 Codeigniter 框架无法正常工作 这是我的观点 a href gt Back to Main a 您应该在控制器构造方法或像这样调用视图的函数中加载 url helper this gt load gt helper
  • 在 AngularJS 中的页面之间共享数据返回空

    通常 我编写 SPA 并且通过服务在控制器之间共享数据很简单 我没有使用 SPA 格式 没有使用 ng view 并尝试在页面之间共享数据 但在加载第二个页面 以获取数据 时它是空的 第 1 页 索引 html div div
  • fastapi (starlette) RedirectResponse 重定向到 post 而不是 get 方法

    返回 RedirectResponse 对象后 我遇到了奇怪的重定向行为 事件 py router APIRouter router post create response model EventBase async def event
  • Android 更改小部件背景图片

    在过去的两天里 我一直在努力改变我的小部件的背景 基于一些 if 语句 现在删除 只是想从类中更改小部件背景 下面是我的源代码 不过 怎么了 我之前已经更改了图像 例如背景 但无法让它适用于我的小部件 谢谢 顺便说一句 这是我最近的尝试 W
  • 如何根据产品类别在 WooCommerce 添加到购物车按钮下方添加文本

    我尝试在某些类别的产品页面上的 WooCommerce 添加到购物车按钮下方添加一个 div 我在这里有点不知所措 这段代码没有破坏任何东西 但文本没有显示 我试过了 woocommerce div product form cart af
  • (flask)-sqlalchemy查询,必须导入所有模型

    我对 Flask 和 Flask SQLAlchemy 有一个问题 对于任何查询 我都需要导入所有相关模型 现在我的 auth views py 看起来像这样 编程的前几行所以只是一个测试视图 from flask import jsoni