Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在SQLAlchemy中需要时自动包含连接_Python_Join_Sqlalchemy - Fatal编程技术网

Python 在SQLAlchemy中需要时自动包含连接

Python 在SQLAlchemy中需要时自动包含连接,python,join,sqlalchemy,Python,Join,Sqlalchemy,我正在建立一个关于一组桌子的课程。其中的一个小窗口TableDates包含一个字段TableDates.date,我用它来过滤周期。那很容易。假设查询已具有所需的select构造: query = query.filter(TableDates.date < date) query=query.filter(TableDates.date

我正在建立一个关于一组桌子的课程。其中的一个小窗口TableDates包含一个字段TableDates.date,我用它来过滤周期。那很容易。假设查询已具有所需的select构造:

query = query.filter(TableDates.date < date)
query=query.filter(TableDates.date
当查询已经包含了一个与TableDates的正确连接时,它就可以工作了

但在某些情况下,y的查询不包含正确的联接。在这些情况下,我应该使用:

query = query.join(TableDates).filter(TableDates.date < date)
query=query.join(TableDates).filter(TableDates.date
这就是问题所在。我希望在一个对象方法中包含此筛选代码,该方法可以同时处理已经加入或未加入TableDates的查询。当然,当我使用TableDates连接时,我可以跟踪自己的方法,以决定是否必须在查询中包含join(TableDates)。但我的问题是:有没有办法让SQLAlchemy完成这项工作?我浏览了文档,没有找到任何线索,但可能我错过了

更具体地说,我想到的是:

  • 有一种检查查询以了解TableDates是否已加入其中的方法

  • 有一种写入联接(TableDates)的方法,如果它已经在查询中联接,那么它什么也不做(当然,如果我只是在TableDates已经联接时尝试添加该联接,我会得到一个异常,说明我无法将其自身联接)


如果与TableDates有关系,可以使用any()代替。查询效率不高,但不需要连接或更改查询的整体结构。否则,深入研究查询结构是一项更复杂、更容易出错的工作(您必须深入研究查询。_from_obj,并不总是一项简单的任务)。事实上,很难预测这种连接将如何进行,这正是为什么SQLA不尝试为您做出这样的猜测的原因。我的总体建议是重新组织代码,这样就不会有这个问题。好的,谢谢。如果没有其他反馈,最好的办法可能是重新构建代码。