2009-12-08 3 views
0

J'ai petit code comme ci-dessous:psycopg2 vs sys.stdin.read()

#!/usr/bin/python 
import psycopg2, sys 

try: 
    conn = psycopg2.connect("dbname='smdr' user='bino'"); 
except: 
    print "I am unable to connect to the database" 
cur = conn.cursor() 
v_num = '1' 
cur.execute("SELECT * from genctr WHERE code = %(num)s", dict(num=v_num)) 
rows = cur.fetchall() 
print "\nShow me the databases:\n" 
ctrnum =0 
for row in rows: 
    print row[0]+","+row[1] 

quand je le lance, je me suis

[email protected]:~/mydoc/openerp/smdr$ ./genctr.py 

Show me the databases: 

1,Bahamas 
1,Barbados 
1,Canada 
1,Cayman Islands 
1,United States 
1,Virgin Islands U.S. 

J'essaie de remplacer « v_num = '1' "avec "v_num = sys.stdin.read()"

#!/usr/bin/python 
import psycopg2, sys 

try: 
    conn = psycopg2.connect("dbname='smdr' user='bino'"); 
except: 
    print "I am unable to connect to the database" 
cur = conn.cursor() 
#v_num = '1' 
v_num = sys.stdin.read() 
cur.execute("SELECT * from genctr WHERE code = %(num)s", dict(num=v_num)) 
rows = cur.fetchall() 
print "\nShow me the databases:\n" 
ctrnum =0 
for row in rows: 
    print row[0]+","+row[1] 

Mais quand je le lance, je ne suis arrivé ceci:

[email protected]:~/mydoc/openerp/smdr$ echo 1 |./genctr.py 

Show me the databases: 

Veuillez s'il vous plaît donnez-moi votre enlightment sur la façon de le fixer

Sincèrement

-bino-

Répondre

1

echo 1 va donner "1 \ n" à votre programme (c'est " 1 "avec un caractère de nouvelle ligne après). sys.stdin.read() va retourner cette chaîne exacte, puis psycopg2 va préparer l'instruction SQL comme SELECT * from genctr WHERE code = '1\n'. Le résultat ne correspond à aucun résultat, donc le code à l'intérieur de la boucle for ne s'exécutera jamais, ce qui explique pourquoi vous ne voyez aucune sortie supplémentaire.

Essayez de supprimer echo -n 1 pour supprimer le saut de ligne ou sys.stdin.read().strip() pour supprimer les espaces avant et arrière de la chaîne. Si le champ code est un entier, il est peut-être une bonne idée de jeter le résultat de sys.stdin.read() à un int, aussi, comme ceci:

int(sys.stdin.read().strip()) 
+0

Cher Zach Hirsch Merci pour votre enlightment Il fonctionne comme un charme Sincèrement -bino- –

Questions connexes