cx_Oracle: Comment parcourir une série de résultats?

Il existe plusieurs façons d'itérer sur un ensemble de résultats. Quels sont les compromis de chacun?

0
ajouté édité
Vues: 2
Pourriez-vous être un peu plus descriptif? Où est ce champ? Qu'entendez-vous par «choisir»? Qu'est-ce que vous essayez d'accomplir?
ajouté l'auteur Anonymous User, source
ajouté l'auteur steve_mtl, source
Il y a des exceptions à cela, mais la règle générale est la suivante: s'il y a plus d'une façon de le faire, c'est probablement parce que chaque façon convient à différentes situations. Sinon, il n'y aurait qu'un seul moyen.
ajouté l'auteur Jeffrey Kemp, source
non je ne l'ai pas, merci
ajouté l'auteur Daan, source

6 Réponses

Il y a quelques semaines, j'ai ajouté une fonctionnalité similaire à Magic Fields .

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

2
ajouté

Cela me semble être la fonctionnalité post_thumbnail de WordPress. Il va ajouter une boîte sur le côté droit, en dessous de la boîte de tag. Par défaut, la boîte affiche un lien "Définir l'image sélectionnée".

Lorsque vous cliquez dessus, la fenêtre de la galerie multimédia s'ouvre et vous pouvez choisir une photo que vous avez précédemment téléchargée dans la publication en tant qu'image sélectionnée.

Vous pouvez ensuite utiliser:

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

dans votre thème pour afficher l'image sélectionnée.

Pour activer post_thumbnail, il suffit d'ajouter:

add_theme_support( 'post-thumbnails' );

à la fonction de votre thème.php

1
ajouté

Pour répondre un peu à votre question, êtes-vous ouvert à une alternative? Je suggère d'ajouter une photo à un post, classant le post sous une catégorie spécifique pour vos images, et peut-être, en fonction de vos besoins, d'ajouter un champ personnalisé en texte seul pour récupérer cette image spécifique.

$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.'

'; }

Juste une pensée...

0
ajouté
Je suis en train de re-développer mon site Web d'entreprise dans WordPress, et j'ai actuellement quelques images étant rendu à la page de cette façon. Malheureusement, je charge environ 10 images dans un diaporama. Juste aujourd'hui j'ai eu l'idée de charger toutes les dix images dans le même poste et seulement besoin d'appeler un poste au lieu de dix. Maintenant, pour revenir en arrière et nettoyer le code!
ajouté l'auteur cmcculloh, source
intéressant, pourrait jeter un coup d'oeil à cette idée. Cependant, j'ai vu le concept dont je parle utilisé avec l'audio pour un podcast que je cours. Il se peut que je doive regarder leur code et voir comment ils ont abordé le problème.
ajouté l'auteur Daan, source

La méthode canonique consiste à utiliser l'itérateur de curseur intégré.

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

Vous pouvez utiliser fetchall() pour obtenir toutes les lignes à la fois.

for row in curs.fetchall():
    print row

Il peut être pratique de l'utiliser pour créer une liste Python contenant les valeurs renvoyées:

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

Cela peut être utile pour des jeux de résultats plus petits, mais peut avoir de mauvais effets secondaires si le jeu de résultats est grand.

  • Vous devez attendre que l'ensemble des résultats soit renvoyé à votre processus client.

  • Vous pouvez manger beaucoup de mémoire dans votre client pour tenir la liste construite.

  • Python peut mettre un certain temps à construire et à déconstruire liste que vous allez immédiatement jeter de toute façon.


Si vous savez qu'une seule ligne est renvoyée dans le jeu de résultats, vous pouvez appeler fetchone() pour obtenir la ligne unique.

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

Enfin, vous pouvez faire une boucle sur l'ensemble de résultats en récupérant une ligne à la fois. En général, il n'y a aucun avantage particulier à faire cela en utilisant l'itérateur.

row = curs.fetchone()
while row:
    print row
    row = curs.fetchone()
0
ajouté
Je pense que SScursor est pour MySQL. Mais tout ce qui a un fetchall() aura probablement la même utilisation de la mémoire, car il retourne une liste de toutes les lignes retournées.
ajouté l'auteur Mark Harrison, source
à propos de la deuxième méthode, que se passe-t-il si vous utilisez un SScursor? cela va-t-il manger beaucoup de mémoire?
ajouté l'auteur Sylvain, source

Mon moyen préféré est l'itérateur du curseur, mais en définissant d'abord la propriété arraysize du curseur.

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

Dans cet exemple, cx_Oracle récupère les lignes à partir d'Oracle 256 lignes à la fois, ce qui réduit le nombre d'aller-retour réseau à effectuer

0
ajouté

Il y a aussi la façon dont psyco-pg semble le faire ... D'après ce que je comprends, il semble créer des proxies de type dictionnaire pour mapper la recherche de clé dans le bloc mémoire renvoyé par la requête. Dans ce cas, aller chercher toute la réponse et travailler avec une usine proxy similaire sur les lignes semble être une idée utile. Quand on y pense, ça ressemble plus à Lua qu'à Python.

Cela devrait également s'appliquer à toutes les interfaces PEAP-249 DBAPI2.0 , pas seulement Oracle, ou voulez-vous dire simplement le plus rapide en utilisant Oracle ?

0
ajouté