Vă mulțumim pentru susținere

cx_Oracle: Cum pot itera peste un set de rezultate?

Există mai multe moduri de a itera peste un set de rezultate. Care sunt compromisurile fiecăruia?

0
adăugat editat
Ai putea fi un pic mai descriptiv? Unde este acest câmp? Ce vrei să spui prin "alegere"? Ce încerci să faci?
adăugat autor Anonymous User
adăugat autor steve_mtl
Există excepții, dar regula generală este: dacă există mai multe modalități de a face acest lucru, probabil că fiecare mod este potrivit pentru situații diferite. Altfel ar exista doar o cale.
adăugat autor Jeffrey Kemp
nu, nu, mulțumesc
adăugat autor Daan

6 răspunsuri

Acum câteva săptămâni am adăugat o caracteristică similară cu Câmpuri magice .

Here's the github project. The most important thing is in this file: js/custom_fields/media_image.js

2
adăugat

Acest lucru mi se pare ca caracteristica post_thumbnail în WordPress. Se va adăuga o casetă în partea dreaptă, sub caseta de etichetare. În mod prestabilit, caseta afișează un link "Setați imaginea recomandată".

Când dați clic pe el, se deschide fereastra cu galeria media și puteți alege o imagine pe care ați încărcat-o anterior în post ca fotografie prezentată.

Puteți folosi apoi:

if (has_post_thumbnail()) {
  the_post_thumbnail();
}

în tema dvs. pentru a afișa imaginea recomandată.

Pentru a activa post_thumbnail, trebuie doar să adăugați:

add_theme_support( 'post-thumbnails' );

la funcția.php a temei

1
adăugat

Pentru a răspunde la întrebarea dvs. un pic lateral, sunteți deschis la o alternativă? Vă sugerăm să adăugați o fotografie la o postare, să încărcați postul într-o anumită categorie pentru imaginile dvs. și, poate, în funcție de nevoile dvs., să adăugați un câmp personalizat numai pentru a recupera imaginea respectivă.

$image = get_posts('cat=the_category&meta_key=the_key&meta_value=the_value');
foreach($image as $img){
    setup_postdata($img);
    //whatever your markup is...
    echo '
'.the_content().'

'; //or echo '
'.$img->post_content.'

'; }

Doar un gand...

0
adăugat
Sunt în proces de re-dezvoltarea site-ul meu de afaceri în WordPress, și am în prezent, câteva imagini sunt redate la pagină în acest fel. Din păcate, încarc în jur de 10 imagini într-o prezentare de diapozitive. Doar astăzi am avut ideea de a încărca toate cele zece imagini în același post și trebuie doar să suni un post în loc de zece. Acum, pentru a merge înapoi și curățați codul!
adăugat autor cmcculloh
interesant, ar putea să arunce o privire la acea idee. Cu toate acestea, am văzut conceptul despre care vorbesc despre utilizarea cu audio pentru un podcast pe care îl conduc. Poate că trebuie să mă uit la codul lor și să văd cum au abordat problema.
adăugat autor Daan

Modul canonic este de a folosi iteratorul cursorului încorporat.

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

Puteți folosi fetchall () pentru a obține toate rândurile simultan.

for row in curs.fetchall():
    print row

Poate fi convenabil să folosiți acest lucru pentru a crea o listă Python care conține valorile returnate:

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

Acest lucru poate fi util pentru seturi de rezultate mai mici, dar poate avea efecte secundare nefavorabile dacă setul de rezultate este mare.

  • Trebuie să așteptați să se întoarcă întregul set de rezultate procesul clientului dvs.

  • Poți consuma o mulțime de memorie în clientul tău lista construită.

  • Ar putea dura ceva timp ca Python să construiască și să deconstruiască listă pe care o veți renunța imediat.


Dacă știți că un singur rând este returnat în setul de rezultate, puteți apela fetchone () pentru a obține rândul unic.

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

În cele din urmă, puteți trece peste setul de rezultate prin preluarea unui rând la un moment dat. În general, nu există niciun avantaj deosebit în ceea ce privește utilizarea acestui iterator.

row = curs.fetchone()
while row:
    print row
    row = curs.fetchone()
0
adăugat
Cred că SScursor este pentru MySQL. Dar orice lucru care are un fetchall () va avea probabil aceeași utilizare a memoriei, deoarece returnează o listă cu toate rândurile returnate.
adăugat autor Mark Harrison
despre a doua metodă, ce se întâmplă dacă folosiți un SScursor? stilul acesta va mânca multă memorie?
adăugat autor Sylvain

Modul meu preferat este iteratorul cursorului, dar mai întâi setarea proprietății arraysize a cursorului.

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

În acest exemplu, cx_Oracle va prelua rânduri din rândurile Oracle 256 la un moment dat, reducând numărul de călătorii rotunde de rețea care trebuie efectuate

0
adăugat

Există, de asemenea, modul psyco-pg care pare să o facă ... Din ceea ce am adunat, se pare că se creează proxy-uri de tip rând cu dicționarul pentru a mapa o căutare cheie în blocul de memorie returnat de interogare. În acest caz, preluarea întregului răspuns și lucrul cu o fabrică proxy similară pe rânduri pare o idee utilă. Însă gândiți-vă la asta, se simte mai mult ca Lua decât Python.

De asemenea, aceasta ar trebui să fie aplicabilă tuturor interfețelor PEP-249 DBAPI2.0 , nu doar Oracle, sau ați vrut să spui doar cea mai rapidă folosind Oracle ?

0
adăugat