मेरे पास मेरे डेटाबेस में एक तालिका है जिसमें एक लिंक्ड सूची है।

ID | page | prior | next
1  | A    | 0     | 2
2  | B    | 1     | 3
3  | C    | 2     | 4
4  | D    | 3     | 5
5  | E    | 4     | 0

मैं इस तालिका में सभी आइटम कैसे प्रदर्शित करूं? एक SORT BY कुछ स्थितीय स्वैप और सम्मिलन के बाद काम नहीं करेगा। मैं फ्लास्क का उपयोग कर रहा हूं, जो Jinja2 टेम्प्लेट का उपयोग करता है। मेरा वर्तमान दृष्टिकोण पहले आइटम का पता लगाना और उसे एक सूची में जोड़ना है। फिर, पिछले आइटम के "अगले" मान के आधार पर, अगली पंक्ति एकत्र करें और इसे सूची में जोड़ें।

num_rows = Pages.query.count()

# find first row, the one where prior is 0
first_row = Pages.query.filter_by(prior=0).first()

# create a list containing just the first row for now
all_rows = [first_row, ]

# add new rows to the list
for i in range(0, (num_rows-1)):
    current_row = all_rows[i].next
    all_rows.append(Pages.query.get(current_row))

अंत में, मैं सूची को render_template('template.html', all_rows = all_rows) पर भेजता हूं, फिर इसे टेम्पलेट में पुनः प्राप्त करता हूं।

निश्चित रूप से एक और अधिक सुरुचिपूर्ण दृष्टिकोण है? मुझे लगता है कि यह बहुत अच्छा प्रदर्शन करेगा और इसके लिए बहुत सारे संसाधनों की आवश्यकता होगी?

0
Panpaper 3 अप्रैल 2020, 10:11

1 उत्तर

सबसे बढ़िया उत्तर

यह इस बात पर निर्भर करता है कि आप किस डीबीएमएस का उपयोग कर रहे हैं। Oracle का एक मालिकाना CONNECT BY PRIOR सिंटैक्स है जिसे पढ़ना बहुत आसान है। कई अन्य लोगों के पास एक WITH सिंटैक्स है जिसका पालन करना कठिन है लेकिन एक ही परिणाम प्राप्त कर सकता है।

देखें एसक्यूएल सर्वर में ओरेकल के पहले से कनेक्ट का अनुकरण< /ए>.

1
Chris Johnson 5 अप्रैल 2020, 03:27