удаление целого значения из массива в sqlite3

#ruby #database #sqlite #type-conversion

#ruby #База данных #sqlite #преобразование типов

Вопрос:

Я использую ruby 2.3 (из соображений совместимости sqlite3). Приведенный ниже код представляет собой минимальные фрагменты для создания связного вопроса.

У меня есть следующая строка в методе:

 def pull_value(id_item_hash)
     ...
            ...
            pull = db.execute2 "Select Level from sometable where Id = :id OR Item = :item" ,id_item_hash[:id], id_item_hash[:item]
            @pull=Integer(pull) #@pull=Integer(pull[1]) DOESN'T solve the problem
            ...
     ...
end
  

Однако @pull возвращает Array , что приводит к TypeError в строке ниже:

 #here
pulled = x.pull_value(id_item_hash)

#so these lines never run
print "subtract how much?: "; subtracting = Integer(gets.chomp)
new_value = pulled - subtracting
  

Мой вопрос: Как я могу удалить первое найденное значение в столбце Label , чтобы моя переменная pull могла хранить это значение отдельно как целое число?

Комментарии:

1. Метод execute2 возвращает выбранные строки плюс строку для названий столбцов. pull[1] должно выдать вам первую строку, возвращаемую SQL-запросом. pull[1][0] Я думаю, это даст вам значение, которое вы ищете.

2. @Richard похоже, это помогло. Могу ли я спросить, почему pull[1][0] работает в отличие от: уровень `pull[1][2]’ на самом деле является столбцом 3 (кардинальный 2)? PS: возможно, добавьте это в качестве ответа, чтобы я мог принять?

3. Поскольку вы выбираете только столбец ‘Level’, это будет 1-й элемент (с нулевым индексом).

4. В этом разница между высказыванием SELECT * FROM table и SELECT column_name FROM table . В первом утверждении вы говорите: «Дайте мне все столбцы». Во втором утверждении вы говорите: «Дайте мне только ОДИН столбец».

5. IOW: SELECT можно временно изменить порядок столбцов. теперь я знаю 😉

Ответ №1:

Попробуйте это

 id = id_item_hash[:id]
item = id_item_hash[:item]
pull = db.execute2("Select Level from sometable where Id = :id OR Item = :item")

# puts pull[1][0]
@pull = pull[1][0]