Найти - Пользователи
Полная версия: Оптимизация кода в python: извлечение строк из запроса к БД
Начало » Python для новичков » Оптимизация кода в python: извлечение строк из запроса к БД
1
Cenzor
Здравствуйте. Используя библиотеку psycopg2 из БД (postgresql) я извлёк несколько строк с данными.
 cur.execute(querry)
К примеру, содержимое строк следующее:
 >>for row in cur:
    row[0]+" "+row[1]
Иванов Москва
Петров Пенза
Сидоров Волгоград
Кузнецов Смоленск
Теперь вопрос: как мне не прогоняя весь цикл, сразу из курсора можно извлечь 3 строку “Сидоров Волгоград”, не прибегая к повторному запросу к БД для извлечения именно нужной записи?
vic57
тут лучше оптимизировать запросы к БД
 select user_name,town from my_table where user_name='Сидоров'
а если выбираешь все, а потом делаешь фильтрацию то зря грузишь и БД и клиента
Cenzor
vic57
тут лучше оптимизировать запросы к БД
Я объясню.
Пользователь хочет найти в справочнике нужного ему человека, в БД присутствует поиск по фамилии, пользователь вводит фамилию - выводятся найденные записи, в которых фамилия соответствует запросу, например “Иванов”
Пользователю выводится информация, например:
Иванов Семён Москва
Иванов Пётр Санкт-Петербург
Ивано Степан Вологда

Пользователь идентифицирует по этим полям нужного Иванова, выбирает его и ему предоставляются вся информация по этой записи. Вот как раз эту информацию я и хочу вытянуть в уже имеющемся массиве данных cursor (в нём уже есть эти 3 строки со всеми полями)
FishHook
Cenzor

В таблице у вас обязательно должно быть поле (или набор полей) Primary Key, однозначно идентифицирующее запись. Как правило это автоинкрементное Long поле. Вам надо получить это поле вместе с остальными в первом запросе, а потом использовать его для выборки детализации.
vic57
Cenzor
если вы получаете массив поиск по любому будет циклом, это основы программирования
 out = [ i for i in cur if i[0] == 'Сидоров' and i[1] == 'Волгоград']
Cenzor
vic57
Cenzorесли вы получаете массив поиск по любому будет циклом, это основы программирования
спасибо, но у вас используется генератор списка, в котором в свою очередь используется цикл, это основы программирования
vic57
ну так в любом случае в основе - массивы, циклы, указатели. все остальное - обертки
Cenzor
ну тут в явном виде цикл используется.
Мне вод подсказывают, цитирую “ у объекта курсора есть метод fetchall(), которым вы можете выгрузить его содержимое в список и дальше уже к нему обращаться по индексу.”
Видимо, это лучший вариант
Shaman
Cenzor
не прибегая к повторному запросу к БД для извлечения именно нужной записи?
Нужную запись между запросами могут подправить?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB