2017-09-10 4 views
2

J'ai des problèmes avec l'exécution de plusieurs requêtes sur ma base de données psql en utilisant psycopg2. Exemple:psycopg2 ne peut pas exécuter plusieurs requêtes

#!/usr/bin/env python 
#-*- coding: utf-8 -*- 

import psycopg2 
from psycopg2.extras import RealDictCursor 

def CreateUser(user, mySchema): 

    conn = psycopg2.connect("dbname='postgres' user='root' password='somePassword' host='localhost'") 
    cur = conn.cursor() 
    cur.execute("""create user %s""" % (user)) 
    conn.commit() 
    cur.close() 
    conn.close() 
    CreateSchema(user, mySchema) 


def CreateSchema(user, mySchema): 
    conn = psycopg2.connect("dbname='postgres' user='root' password='somePassword' host='localhost'") 
    cur = conn.cursor() 
    cur.execute("""create schema %s authorization %s """ % (user,mySchema)) 
    conn.commit() 
    cur.close() 
    conn.close() 

def FetchUserInput(): 
    userInput = raw_input("UserName") 
    mySchema = raw_input("SchemaName") 
    CreateUser(userInput, mySchema) 


FetchUserInput() 

Dans ce cas, la deuxième requête échoue avec une erreur que l'utilisateur créé précédemment n'existe pas! Si j'exécute uniquement la fonction CreateUser, cela fonctionne correctement. Si je l'exécute manuellement dans psql, cela fonctionne correctement. As Si la première validation n'est pas exécutée sur la base de données lorsque j'ouvre une seconde connexion dans la fonction CreateSchema, ce qui n'a aucun sens.

Qu'est-ce que je fais mal?

Répondre

1

On dirait que vous avez juste inversé les 2 paramètres dans la deuxième requête:

cur.execute("""CREATE SCHEMA %s AUTHORIZATION %s """ % (mySchema, user)) 

Une aide de la doc:

SCHEMA schema_name CREER [AUTHORIZATION user_name] [élément_schéma [.. .]]

SCHEMA AUTHORIZATION user_name CREER [élément_schéma [...]]

CREATE SCHEMA SINON schema_name EXISTE [AUTHORIZATION user_name]

CREATE SCHEMA SINON EXISTE AUTORISATION user_name

+1

ah Jésus-Christ. THX. PET de cerveau – py9