PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

सर्वर साइड कर्सर के लिए Psycopg2 पंक्ति गणना

सर्वर-साइड कर्सर के मामले में, हालांकि cursor.execute() रिटर्न, जरूरी नहीं कि क्वेरी उस समय सर्वर द्वारा निष्पादित की गई हो, और इसलिए पंक्ति गणना psycopg2 के लिए उपलब्ध नहीं है . यह DBAPI 2.0 spec के अनुरूप है जो बताता है कि rowcount यदि अंतिम ऑपरेशन की पंक्ति संख्या अनिश्चित है तो -1 होना चाहिए।

इसे cursor.fetchone() . के साथ जबरदस्ती करने का प्रयास , उदाहरण के लिए, अपडेट cursor.rowcount , लेकिन केवल पुनर्प्राप्त की गई वस्तुओं की संख्या से, ताकि यह उपयोगी न हो। cursor.fetchall() परिणाम rowcount . होगा हालांकि, सही ढंग से सेट किया जा रहा है, जो उस डेटा की पूरी क्वेरी और हस्तांतरण करता है जिसे आप टालना चाहते हैं।

एक संभावित समाधान जो गिनती प्राप्त करने के लिए पूरी तरह से अलग क्वेरी से बचता है, और जो सटीक परिणाम देता है वह है:

select *, (select count(*) from test) from test;

इसके परिणामस्वरूप प्रत्येक पंक्ति में अंतिम कॉलम के रूप में तालिका पंक्ति गणना संलग्न होगी। फिर आप cursor.fetchone() . का उपयोग करके तालिका पंक्ति गणना प्राप्त कर सकते हैं और फिर अंतिम कॉलम लेना:

with db.cursor('cursor_name') as cursor:
    cursor.execute('select *, (select count(*) from test) from test')
    row = cursor.fetchone()
    data, count = row[:-1], row[-1]

अब count तालिका में पंक्तियों की संख्या होगी। आप row[:-1] का उपयोग कर सकते हैं पंक्ति डेटा को संदर्भित करने के लिए।

यह क्वेरी को धीमा कर सकता है क्योंकि संभवतः महंगा SELECT COUNT(*) प्रदर्शन किया जाएगा, लेकिन एक बार हो जाने के बाद डेटा पुनर्प्राप्त करना तेज़ होना चाहिए।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. हाइबरनेट 3.3.2GA PostgreSQL 9.0 से बाइटा डेटा को अनुचित तरीके से लोड करता है और सभी प्रकार की मैपिंग सही हैं

  2. पूर्णांकों का विभाजन 0 . लौटाता है

  3. कुप्पी-SQLAlchemy db.session.query(मॉडल) बनाम Model.query

  4. PostgreSQL में बड़ी XML फ़ाइल (~10GB) कैसे आयात करें

  5. PostgreSQL को क्लाउड में माइग्रेट करना - Amazon, Google और Microsoft से समाधानों की तुलना करना