मैं फ्लास्क-स्क्लाक्लेमी का उपयोग कर रहा हूं, और मैं एक माता-पिता मॉडल में hybrid method लिखने की कोशिश कर रहा हूं जो कि बच्चों की संख्या लौटाता है, इसलिए मैं फ़िल्टरिंग के लिए इसका उपयोग कर सकता हूं, सॉर्टिंग आदि यहाँ मैं क्या कोशिश कर रहा हूँ के कुछ कोड नीचे छीन लिया है:SQLAlchemy - बच्चे की गणना के लिए एक संकर विधि लिखना
# parent.py
from program.extensions import db
from sqlalchemy.ext.hybrid import hybrid_method
class Parent(db.Model):
__tablename__ = 'parents'
parent_id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80))
children = db.relationship('Child', backref='parent', lazy='dynamic')
def __init__(self, name):
self.name = name
@hybrid_method
def child_count(self):
return self.children.count()
@child_count.expression
def child_count(cls):
return ?????
# child.py
from program.extensions import db
from program.models import Parent
class Child(db.Model):
__tablename__ = 'children'
child_id = db.Column(db.Integer, primary_key=True)
parent_id = db.Column(db.Integer, db.ForeignKey(Parent.parent_id))
name = db.Column(db.String(80))
time = db.Column(db.DateTime)
def __init__(self, name, time):
self.name = name
self.time = time
मैं दो समस्याओं में यहाँ चल रहा हूँ। एक के लिए, मैं वास्तव में क्या "CHILD_COUNT (सीएलएस)" है, जो एक SQL अभिव्यक्ति हो गया है में वापस जाने के लिए नहीं पता ... मुझे लगता है कि ऐसा लगता है जैसे
return select([func.count('*'), from_obj=Child).where(Child.parent_id==cls.parent_id).label('Child count')
कुछ किया जाना चाहिए, लेकिन मैं नहीं कर रहा हूँ ज़रूर। मेरे पास एक और मुद्दा यह है कि मैं paren.py से बाल वर्ग आयात नहीं कर सकता, इसलिए मैं उस कोड का उपयोग किसी भी तरह से नहीं कर सका। क्या इसके लिए स्ट्रिंग का उपयोग करने का कोई तरीका है? उदाहरण के लिए,
select([func.count('*'), from_obj='children').where('children.parent_id==parents.parent_id').label('Child count')
आखिरकार, मैं की तरह कुछ करने के लिए प्रक्रिया में परिवर्तन करना चाहता हूँ:
def child_count(cls, start_time, end_time):
# return the number of children whose "date" parameter is between start_time and end_time
... लेकिन अब के लिए, मैं सिर्फ यह काम करने के लिए प्राप्त करने की कोशिश कर रहा हूँ। जो भी इस के साथ मेरी मदद कर सकता है, उसके लिए बहुत धन्यवाद, क्योंकि मैं इसे लंबे समय से समझने की कोशिश कर रहा हूं।
आह, बहुत बहुत धन्यवाद! आपने अंततः इसे समझने में मेरी मदद की है। – fimbul
यह वही है जो मैं ढूंढ रहा था! धन्यवाद! – Stanislav