سؤال

هناك عدة طرق تكرار عبر مجموعة نتائج.ما هي المقايضة من كل ؟

هل كانت مفيدة؟

المحلول

الكنسي طريقة هي استخدام المدمج في المؤشر مكرر.

curs.execute('select * from people')
for row in curs:
    print row

يمكنك استخدام fetchall() الحصول على جميع الصفوف في وقت واحد.

for row in curs.fetchall():
    print row

يمكن أن تكون مريحة استخدام هذا لإنشاء قائمة بيثون التي تحتوي على القيم التي يتم إرجاعها:

curs.execute('select first_name from people')
names = [row[0] for row in curs.fetchall()]

هذا يمكن أن يكون مفيدا أصغر مجموعات النتائج ، ولكن يمكن أن يكون لها آثار جانبية سيئة إذا كانت النتيجة مجموعة كبيرة.

  • لديك إلى الانتظار للحصول على كامل مجموعة النتائج إلى أن عاد إلى العميل الخاص بك في عملية.

  • قد تلتهم الكثير من الذاكرة في الكمبيوتر العميل إلى عقد المبنية القائمة.

  • قد يستغرق بعض الوقت بالنسبة الثعبان بناء وتفكيك القائمة التي أنت ذاهب إلى تجاهل فورا على أي حال.


إذا كنت تعرف أن هناك صف واحد يتم إرجاعها في مجموعة النتائج يمكنك الاتصال fetchone() للحصول على صف واحد.

curs.execute('select max(x) from t')
maxValue = curs.fetchone()[0]

أخيرا, يمكنك حلقة أكثر من مجموعة النتائج جلب صف واحد في وقت واحد.في عام ، ليس هناك ميزة خاصة في القيام بذلك عبر استخدام التكرار.

row = curs.fetchone()
while row:
    print row
    row = curs.fetchone()

نصائح أخرى

بلدي المفضل هو المؤشر مكرر, ولكن وضع أول arraysize الملكية المؤشر.

curs.execute('select * from people')
curs.arraysize = 256
for row in curs:
    print row

في هذا المثال ، cx_Oracle سوف تجلب الصفوف من أوراكل 256 الصفوف في وقت واحد ، والحد من عدد من الشبكة جولة الرحلات التي تحتاج إلى أن يتم تنفيذ

هناك أيضا طريقة psyco-pg يبدو أن تفعل ذلك...ما جمع ، يبدو أن إنشاء قاموس مثل صف وكلاء خريطة مفتاح البحث في الذاكرة كتلة إرجاعها بواسطة الاستعلام.في هذه الحالة, جلب الإجابة كاملة وتعمل مع مماثلة الوكيل-مصنع على الصفوف يبدو مثل فكرة مفيدة.تعال إلى التفكير في الأمر على الرغم من أنه يشعر أكثر مثل Lua من بيثون.

أيضا, يجب أن يكون هذا ينطبق على جميع بيب-249 DBAPI2.0 واجهات, ليس فقط أوراكل ، أو لم تقصد فقط أسرع باستخدام أوراكل?

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top