python - 为什么 SQLAlchemy 会重新加载joinedloaded 属性
问题描述
我试图阻止 SQLAlchemy 执行 SQL 请求,因为重新加载没有意义,因为我看到它已经加载。
一点上下文:
我有一个FeedsOut
如下所示的类:
class FeedsOut(db.Model):
__tablename__ = 'feeds_out_tb'
username = db.Column(db.String(SLen.NAME), unique=True)
cpc_params = db.relationship('CPC', lazy='joined', backref=db.backref('source', lazy='joined'))
和一个CPC
看起来像这样的类:
class CPC(db.Model):
__tablename__ = 'cpc_tb'
id = db.Column(db.Integer, primary_key=True)
provider = db.Column(db.String, db.ForeignKey('feeds_out_tb.username'))
我通过以下代码一次加载:
# Yes, you're missing some attributes in the Model.py, but that's not an issue to understand the problem :)
feed_query = FeedsOut.query.filter(or_(FeedsOut.inactive == False, FeedsOut.inactive == None)).order_by(
FeedsOut.username)
if usernames:
feed_query = feed_query.filter(FeedsOut.username.in_(usernames))
feeds = feed_query.options(joinedload(FeedsOut.cpc_params, innerjoin=True), raiseload('*')).all()
查询正在运行并加载所有内容:
Start Query: %s SELECT feeds_out_tb.id AS feeds_out_tb_id, feeds_out_tb.created_at AS feeds_out_tb_created_at, feeds_out_tb.updated_at AS feeds_out_tb_updated_at, feeds_out_tb.username AS feeds_out_tb_username, feeds_out_tb.password AS feeds_out_tb_password, feeds_out_tb.sources AS feeds_out_tb_sources, feeds_out_tb.categories AS feeds_out_tb_categories, feeds_out_tb. job_types AS feeds_out_tb_job_types, feeds_out_tb.b2b_ids AS feeds_out_tb_b2b_ids, feeds_out_tb.keywords AS feeds_out_tb_keywords, feeds_out_tb.radius AS feeds_out_tb_radius, feeds_out_tb.picture AS feeds_out_tb_picture, feeds_out_tb.formatter AS feeds_out_tb_formatter, feeds_out_tb.refreshable AS feeds_out_tb_refreshable, feeds_out_tb.max_count AS feeds_out_tb_max_count, feeds_out_tb.apply_directly AS feeds_out_tb_apply_directly,feeds_out_tb。min_label_tolerated AS feeds_out_tb_min_label_tolerated, feeds_out_tb.max_label_tolerated AS feeds_out_tb_max_label_tolerated, feeds_out_tb.inactive AS feeds_out_tb_inactive, feeds_out_tb.cpc AS feeds_out_tb_cpc, feeds_out_tb.tracking AS feeds_out_tb_tracking, feeds_out_tb.refresh_rate AS feeds_out_tb_refresh_rate, cpc_tb_1.id AS cpc_tb_1_id, cpc_tb_1.provider AS cpc_tb_1_provider, cpc_tb_1.label AS cpc_tb_1_label, cpc_tb_1.price AS cpc_tb_1_price, cpc_tb_1.date AS cpc_tb_1_date, cpc_tb_1.xml_representation AS cpc_tb_1_xml_representation FROM feeds_out_tbid AS cpc_tb_1_id, cpc_tb_1.provider AS cpc_tb_1_provider, cpc_tb_1.label AS cpc_tb_1_label, cpc_tb_1.price AS cpc_tb_1_price, cpc_tb_1.date AS cpc_tb_1_date, cpc_tb_1.xml_representation AS cpc_tb_1_xml_representation FROM feedid AS cpc_tb_1_id, cpc_tb_1.provider AS cpc_tb_1_provider, cpc_tb_1.label AS cpc_tb_1_label, cpc_tb_1.price AS cpc_tb_1_price, cpc_tb_1.date AS cpc_tb_1_date, cpc_tb_1.xml_representation AS cpc_tb_1_xml_representation FROM feed加入 cpc_tb AS cpc_tb_1 ON feeds_out_tb.username = cpc_tb_1.provider WHERE (feeds_out_tb.inactive = false OR feeds_out_tb.inactive 为 NULL) AND feeds_out_tb.username IN (%(username_1)s) ORDER BY feeds_out_tb.username 查询完成!总时间:%f 0.007048130035400391
然后,后来我打电话:provider.cpc_params
然后问题是它重新加载了关系:
formatter AS feeds_out_tb_1_formatter, feeds_out_tb_1.refreshable AS feeds_out_tb_1_refreshable, feeds_out_tb_1.max_count AS feeds_out_tb_1_max_count, feeds_out_tb_1.apply_directly AS feeds_out_tb_1_apply_directly, feeds_out_tb_1.min_label_tolerated AS feeds_out_tb_1_min_label_tolerated, feeds_out_tb_1.max_label_tolerated AS feeds_out_tb_1_max_label_tolerated, feeds_out_tb_1.inactive AS feeds_out_tb_1_inactive, feeds_out_tb_1.cpc AS feeds_out_tb_1_cpc, feeds_out_tb_1.tracking AS feeds_out_tb_1_tracking, feeds_out_tb_1.refresh_rate AS feeds_out_tb_1_refresh_rate FROM cpc_tb 左外连接 feeds_out_tb AS feeds_out_tb_1 ON feeds_out_tb_1.username = cpc_tb.provider WHERE %(param_1)s = cpc_tb.provider 查询完成!总时间:%f 0.0015804767608642578 refreshable AS feeds_out_tb_1_refreshable, feeds_out_tb_1.max_count AS feeds_out_tb_1_max_count, feeds_out_tb_1.apply_directly AS feeds_out_tb_1_apply_directly, feeds_out_tb_1.min_label_tolerated AS feeds_out_tb_1_min_label_tolerated, feeds_out_tb_1.max_label_tolerated AS feeds_out_tb_1_max_label_tolerated, feeds_out_tb_1.inactive AS feeds_out_tb_1_inactive, feeds_out_tb_1.cpc AS feeds_out_tb_1_cpc, feeds_out_tb_1.tracking AS feeds_out_tb_1_tracking, feeds_out_tb_1.refresh_rate AS feeds_out_tb_1_refresh_rate FROM cpc_tb 左外连接 feeds_out_tb AS feeds_out_tb_1 ON feeds_out_tb_1.username = cpc_tb.provider WHERE %(param_1)s = cpc_tb.provider 查询完成!总时间:%f 0.0015804767608642578 refreshable AS feeds_out_tb_1_refreshable, feeds_out_tb_1.max_count AS feeds_out_tb_1_max_count, feeds_out_tb_1.apply_directly AS feeds_out_tb_1_apply_directly, feeds_out_tb_1.min_label_tolerated AS feeds_out_tb_1_min_label_tolerated, feeds_out_tb_1.max_label_tolerated AS feeds_out_tb_1_max_label_tolerated, feeds_out_tb_1.inactive AS feeds_out_tb_1_inactive, feeds_out_tb_1.cpc AS feeds_out_tb_1_cpc, feeds_out_tb_1.tracking AS feeds_out_tb_1_tracking, feeds_out_tb_1.refresh_rate AS feeds_out_tb_1_refresh_rate FROM cpc_tb 左外连接 feeds_out_tb AS feeds_out_tb_1 ON feeds_out_tb_1.username = cpc_tb.provider WHERE %(param_1)s = cpc_tb.provider 查询完成!总时间:%f 0.0015804767608642578 min_label_tolerated AS feeds_out_tb_1_min_label_tolerated, feeds_out_tb_1.max_label_tolerated AS feeds_out_tb_1_max_label_tolerated, feeds_out_tb_1.inactive AS feeds_out_tb_1_inactive, feeds_out_tb_1.cpc AS feeds_out_tb_1_cpc, feeds_out_tb_1.tracking AS feeds_out_tb_1_tracking, feeds_out_tb_1.refresh_rate AS feeds_out_tb_1_refresh_rate FROM cpc_tb LEFT OUTER JOIN feeds_out_tb AS feeds_out_tb_1 ON feeds_out_tb_1.username = cpc_tb.provider WHERE %(param_1)s = cpc_tb.provider 查询完成!总时间:%f 0.0015804767608642578 min_label_tolerated AS feeds_out_tb_1_min_label_tolerated, feeds_out_tb_1.max_label_tolerated AS feeds_out_tb_1_max_label_tolerated, feeds_out_tb_1.inactive AS feeds_out_tb_1_inactive, feeds_out_tb_1.cpc AS feeds_out_tb_1_cpc, feeds_out_tb_1.tracking AS feeds_out_tb_1_tracking, feeds_out_tb_1.refresh_rate AS feeds_out_tb_1_refresh_rate FROM cpc_tb LEFT OUTER JOIN feeds_out_tb AS feeds_out_tb_1 ON feeds_out_tb_1.username = cpc_tb.provider WHERE %(param_1)s = cpc_tb.provider 查询完成!总时间:%f 0.0015804767608642578 refresh_rate AS feeds_out_tb_1_refresh_rate FROM cpc_tb 左外连接 feeds_out_tb AS feeds_out_tb_1 ON feeds_out_tb_1.username = cpc_tb.provider WHERE %(param_1)s = cpc_tb.provider 查询完成!总时间:%f 0.0015804767608642578 refresh_rate AS feeds_out_tb_1_refresh_rate FROM cpc_tb 左外连接 feeds_out_tb AS feeds_out_tb_1 ON feeds_out_tb_1.username = cpc_tb.provider WHERE %(param_1)s = cpc_tb.provider 查询完成!总时间:%f 0.0015804767608642578
我不明白为什么,这个关系还没有加载吗?在堆栈_emit_lazyload
中提到了,但我认为它不应该发生,因为一切都应该被加入......
我错过了什么?
解决方案
推荐阅读
- c# - 我在“设置”属性下面做错了什么?
- c# - How can i do so i dont crash my program, when i enter a character instead of a int
- java - Spring Cloud Config - 无法克隆或签出存储库
- python - Python + Selenium WebDriver: open URL in new tab
- css - 如何正确更改此代码?
- logging - Change kubernetes (kubeadm) logging away from /var/log/messages
- apache-kafka - 卡夫卡与其他目的地恰好一次
- firebase - 如何在颤动中将数据作为文本表单字段中的数字保存到云 Firebase
- puppet - Puppet 尝试重命名 sites-avaialbe 文件夹
- pymol - Focusing in on specific areas in PyMOL from command line?