#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]