Передача значений в функцию из функции в Python - PullRequest
0 голосов
/ 12 января 2012

Мне нужно передать значения из одной функции в другую изнутри функции.

Например (мой бот 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 ]

0 голосов
/ 12 января 2012

Я не очень уверен насчет этой строки кода:

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

Обратите внимание, что в выражении запроса нет ни одного кавычки.

0 голосов
/ 12 января 2012

Что вы подразумеваете под строкой "sql" "возвращает ноль" - строка не является функцией или выражением, поэтому она ничего не "возвращает". Строка - это просто буквальное значение.

Вы говорите, что cursor.execute () возвращает ноль? Чему равен «курсор»? Правильно ли вы инициализируете объект «курсор» где-то еще?

если «курсор» является глобальным объектом, вам, возможно, придется объявить его таким образом, например:

глобальный курсор

в противном случае вы не сможете внести в него изменения.

Кроме этого, я не могу понять, что ты делаешь или что не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...