python - 自动加载表上的所有 SQLAlchemy 查询是否在导入后运行?
问题描述
我正在自动加载数据库表SQLAlchemy
:
# src/database/tables.py
from setup import engine
from sqlalchemy import Table
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base(engine)
class Address(Base):
__table__ = Table('addresses', Base.metadata,
autoload=True, autoload_with=engine)
class Doctor(Base):
__table__ = Table('doctors', Base.metadata,
autoload=True, autoload_with=engine)
我有导入这些表类的查询文件,我尝试创建稍后将在我的主run.py
脚本中使用的所有查询:
# src/queries/addresses.py
from src.database.tables import Address, Doctor
from setup import session
join = (
session.query(Address)
.join(Doctor, Doctor.DoctorID == Address.ClientID)
)
...
# lots of additional declared queries
我有一个run.py
导入查询并从中创建熊猫数据框。
# run.py
import setup as stp
print('Prints instantly')
from src.queries import doctors, addresses
print('This prints only after a lot of time')
from src.methods import pandas_helper as pdh
import matplotlib.pyplot as plt
# creating dataframes from certain queries and plot them
每次我在所有导入后运行一次run.py
,print('test')
执行时间都会变得很长。我已经print()
在查询文件的导入周围添加了其他功能,以确保该过程需要花费大量时间。
我认为原因一定是从头开始自动加载数据库表,或者是我在使用这些表的查询文件中声明的大量查询。
我不确定查询何时实际运行。我猜是在声明之后,所以当我导入所有文件时,我的所有查询都会立即被调用?
有没有办法只创建所有这些查询和表自动加载并仅在我想使用需要这些资源的特定查询变量时运行它们?
解决方案
有点看不到树木的情况。是的,声明的查询变量都是在导入时创建的。
只需将所有查询变量放入函数即可解决问题。您必须在需要时调用该函数,而不是导入大量查询变量。
# src/queries/addresses.py
from src.database.tables import Address, Doctor
from setup import session
def join():
return (
session.query(Address)
.join(Doctor, Doctor.DoctorID == Address.ClientID)
)
更像是我脑海中的一个基本 Python 问题,但同样具有启发性。
推荐阅读
- mysql - 如果列的值为0,我如何选择表的行,否则如果sql中的值不是0,则左连接?
- javascript - 为本地测试设置 GitHub Actions 输入值
- java - 为什么当我在我的搜索栏 android 中快速删除文本时我的 recyclerview 没有重置?
- selenium - 单击内部表格不适用于 Selenium ide 录制
- ios - AWS Cognito“confirmSignUp”出现错误代码
- reactjs - 简单的反应功能组件不生成 HTML
- linux - 如何过滤掉/省略linux日志中的特定模式
- magento - Magento 1.9:前端页面是空白的(只有标题可见)
- javascript - Firebase 安全规则 - 访问其他文档中的字段
- java - Eclipse - 更改自动完成建议的顺序