2010-11-05 3 views
0

J'ai un script qui génère une requête SQL en tant que texte, par ex. Que je voudrais ensuite exécuter sur une base de données PostgreSQL. Je peux le faire en deux lignes comme celle-ci:Utilisation de canaux pour rediriger une requête SQL générée par une fonction vers la commande psql

python SQLgeneratingScript.py parameters > temp.sql 
psql -f temp.sql -d my_database 

Mais semble que je devrais pouvoir d'une ligne avec des tuyaux, mais je ne sais pas comment.

+0

pourquoi vous n'utilisez un connecteur de base de données de python comme psycopg2 ??? – mouad

Répondre

2
python SQLgeneratingScript.py parameters|psql -d my_database 
0

je ne sais pas pourquoi vous n'utilisez un connecteur postgresql python comme psycopg2, mais bien si vous voulez faire ce que vous essayez de faire en utilisant la redirection de commande Unix vous devrez le faire comme ceci dans votre code

... 
print "SELECT COUNT(*) FROM important_table" # or use sys.stdout.write() 

cela va écrire dans votre fichier temp.sql si vous avez couru votre commande comme ceci:

python SQLgeneratingScript.py parameters > temp.sql 

mais bien je vous suggère d'écrire en vous produirez en python comme celui-ci

def generate_sql(): 
    ... 
    return "SELECT COUNT(*) FROM important_table" 

with open('temp.sql', 'w') as f 
    sql = generate_sql() 
    f.write(sql) 

ou une utilisation plus psycopg2 pour exécuter directement votre sql

import psycopg2 

def generate_sql(): 
    ... 
    return "SELECT COUNT(*) FROM important_table" 

conn = psycopg2.connect("dbname= ...") 

cur = conn.cursor() 
sql = generate_sql() 
cur.execute(sql) 

conn.close() 
+0

Merci - datacenter ne me laissera pas installer psycopg2 (et je suis encore en train de trouver comment faire la redirection de port SSH) :( –

Questions connexes