2015-01-08 3 views
0

Я запускаю хранимую процедуру из Python, которая выполняет запрос SELECT в базе данных MYSQL, чтобы определить, существует ли запись или нет.cursor.fetchone() возвращает значение, которого нет в базе данных

После этого я использую cursor.fetchone(), чтобы сравнить результат запроса со значением переменной. Однако, когда я проверяю значение, содержащееся в результате запроса, оно совпадает с параметром, который я передал с запросом, даже если эта запись не существует в базе данных.

Обязательно это должно быть None?

Для записи параметр, который я передаю, имеет направление IN и является int.

Я проверил остальную часть SO, и все проблемы, подобные этим, которые я видел, являются обратными тому, что я получаю! Я также исследовал cursor.fetchone(), чтобы убедиться, что я правильно его использую, и кажется, что я есть.

Любая помощь была бы принята с благодарностью!

таблица Я запрашивая

ID = 1

Name = Имя

хранимая процедура

CREATE PROCEDURE `storedprocedure2`(IN `param` INT) NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER 

SELECT `This` 
FROM `That` 
WHERE `This` = param 

вызов запроса

def loadintodatabase(self, connection, args): 

    value1 = args[0] 
    value2 = args[1] 
    value3 = args[2] 
    value4 = args[3] 
    value5 = args[4] 
    value6 = args[5] 
    value7 = args[6] 
    value8 = args[7] #this is a list 
    value8length = len(value8) 
    value9 = args[8] #this is also a list 
    value9length = len(value9) 
    id = 0 
    i = 0 
    idlist = [] #this is not related to the id variable 
    idlistincrement = 0 

    if value 8 != []: 
     while i < value8length: 
      cursor = connection.cursor() 
      cursor.callproc('storedprocedure1', (value8[0], value8[1], value8[2])) #Inserts into a different table 
      idlist.append(value8[0]) 
      cursor.close() 
      connection.commit() 
      i += 1 

    i = 0 
    if value3 != 0 and value4 is not None:    
     cursor = connection.cursor() 
     cursor.callproc('storedprocedure2', (param,)) #lets say param holds 11 as an int, sproc is a select query 
     result = cursor.fetchone() #result should be None but instead is (11L,) 
     if result is None: 
       id = None 
     else: 
      id = result[0] 
     if id is None: 
      cursor = connection.cursor() 
      cursor.callproc('storedprocedure3', (value3, value4)) #sproc inserts into the table I just selected the id from 
      cursor.close() 
      connection.commit() 
+0

Я могу видеть backquotes вместо кавычек в хранимой процедуре. Являются ли они простым типом? –

+0

Нет? Я использую phpmyadmin для просмотра моей базы данных, и она отмечает столбцы, таблицы и базы данных в обратных окнах. – Supergoat21

+0

Пожалуйста, покажите свой полный код * python *, так как это, скорее всего, будет содержать ответ. Также покажите все определение хранимой процедуры. Есть ли причина, по которой вам понадобится хранимая процедура в этом простом случае? Почему не просто: query = 'SELECT ID из таблицы, где ID =% s' и curse.execute (query, (param,))? – JJC

ответ

0

Хранимая процедура была немного неправильной.

SELECT `This` 
FROM `That` 
WHERE `This` = param 

должен был

BEGIN 
SELECT `This` 
FROM `That` 
WHERE `This` = param; 
END 

Теперь cursor.fetchone() возвращает None, как и ожидалось!

Смежные вопросы