2012-01-12 20 views
-1

ある関数から次の関数に値を渡す必要があります。Pythonの関数内から関数に値を渡す

例えば

(私のIRCボットはチャンネル内のコマンドに応答するようにプログラムさ):

def check_perms(nick,chan,cmd): 
    sql = "SELECT `"+ cmd +"` FROM permissions WHERE nick = '"+ nick +"' and chan = '"+ chan +"'" # This returns 0 
    #sql = "SELECT `restart` FROM permissions WHERE nick = 'Me' and chan = '#mychan'" # this works as intended 
    cursor.execute(sql) 
    result = cursor.fetchall() 
    for row in result: 
    if (row[0] == 1): # Nick logged in and has permission 
     return 1 
    else: # nick does not have permissions 
     return 0 

def com_restart(nick,chan): 
    perm = check_perms(nick,chan,"restart") 
    if (perm == 0): # nick did not have permission 
    irc.send("NOTICE "+ nick +" :Permission denied.\n") 
    elif (perm == 1): # nick has permission 
    irc.send("PRIVMSG "+ chan +" :I've been asked to restart myself by "+ nick +".\n") 

nick = "Me" # This is determined by a bunch of regex splits and such 
chan = "#mychan" # This is determined by regex splits as well 
com_restart(nick,chan) 

私はこれを試してみてください、しかし、値がSQLクエリに渡されませんようですので、返します0

ご協力いただきありがとうございます。

EDIT - 私が現在取り組んでいるコードを追加しました。

+2

あなたは今まであなたの機能を呼び出していますか?そうでなければ、何も起こりません。 – simchona

+2

あなたのコードには構文に関しては複数の問題がありますが、それ以外はyをどこで呼びますか? fooとbarの初期化後にy(foo、bar)のような呼び出しが必要です。 – Yuushi

+2

実際のコード、実際の対応するエラーメッセージ、実際に何が起こるべきかについての実際の記述、本当の何かを掲載してください。 –

答えて

0

文字列 "sql" "が0を返します" - 文字列は関数または式ではないため、何も返されません。文字列は単なるリテラル値です。

cursor.execute()はゼロを返しますか? 「カーソル」とは何ですか? "カーソル"オブジェクトを他のどこかに正しく初期化していますか?

「カーソル」は、あなたがこのように、そのように宣言する必要があり、グローバルオブジェクトの場合:

グローバルカーソル

がそうでなければ、あなたがそれに変更を加えることはできません。

それ以外は、あなたが何をやっているのか、間違っているのか分かりません。

0

私はこのコード行についてとてもよく分からない:

sql = "SELECT `"+ cmd +"` FROM permissions WHERE nick = '"+ nick +"' and chan = '"+ chan +"'" # This returns 0 

あなたのクエリ文字列を適切な形式であることを確認するためにしようとしているようです。しかし、それは必要ではありません。あなたは、文字列のクエリを連結することができますし、それは次のように正常に動作します:

sql = "SELECT " + cmd + " FROM permissions WHERE nick = " + nick + " and chan = " + chan 

はどこにでもクエリステートメントには、単一引用符がないことを確認します。

関連する問題