2017-09-10 29 views
2

psycopg2を使用してpsql dbで複数のクエリを実行する際に問題があります。例:psycopg2は複数のクエリを実行できません

#!/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() 

この場合、2番目のクエリは、以前作成したユーザーが存在しないというエラーで失敗します。 CreateUser関数のみを実行すると正常に動作します。 psqlで手動で実行するとうまくいきます。

As私がCreateSchema関数内で2番目の接続を開いたときにデータベースで最初のコミットが実行されない場合は意味がありません。

私は間違っていますか?

答えて

1

はあなただけで2番目のクエリで2つのパラメータを反転してきたように見える:

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

ドキュメントからいくつかの助け:

がスキーマSCHEMA_NAME [AUTHORIZATION user_nameの] [schema_elementの[をCREATEを.. 。]]

スキーマAUTHORIZATION user_nameの[schema_elementをCREATE [...]]

[AUTHORIZATION user_nameの]

SCHEMA_NAMEをEXISTSされていない場合SCHEMAを作成しないが、AUTHORIZATION user_nameの

+1

ああ、イエス・キリストを存在する場合、スキーマを作成します。どうも。脳のおなら – py9

関連する問題