Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для Серый_Ветер
21 / 21 / 12
Регистрация: 09.01.2013
Сообщений: 456

Оптимизировать код. взаимодействие с sqlite

30.05.2019, 01:24. Показов 1365. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
имею два запроса:
рабочий вариант.
Python
1
2
3
4
5
6
7
8
9
10
11
12
    type_tech = request.query.get('type_tech', '').decode('utf-8')
    where = ' WHERE name = "%s"' % (type_tech) if type_tech else ''
 
    cur.execute('SELECT * FROM tech ORDER BY id ASC')
    tech = dict((i[0], {'id': i[0], 'name': i[1]}) for i in cur.fetchall())
 
    cur.execute('SELECT * FROM bug_tech')
    tmp = cur.fetchall()
    bg = dict((i[1], []) for i in tmp)
    for i in tmp:
        bg[i[1]].append((tech[i[2]]['id'], tech[i[2]]['name']))
    db.close()
но как только меняю строку запроса в одном запросе:
Python
1
2
3
4
5
6
7
8
9
10
11
12
    type_tech = request.query.get('type_tech', '').decode('utf-8')
    where = ' WHERE name = "%s"' % (type_tech) if type_tech else ''
 
    cur.execute('SELECT * FROM tech'+where+' ORDER BY id ASC')
    tech = dict((i[0], {'id': i[0], 'name': i[1]}) for i in cur.fetchall())
 
    cur.execute('SELECT * FROM bug_tech')
    tmp = cur.fetchall()
    bg = dict((i[1], []) for i in tmp)
    for i in tmp:
        bg[i[1]].append((tech[i[2]]['id'], tech[i[2]]['name']))
    db.close()
питон начинает сыпать ошибками ссылаясь на эту строку:
Python
1
bg[i[1]].append((tech[i[2]]['id'], tech[i[2]]['name']))
я так понял, что получается в первом запросе строк меньше чем во втором, вот и идет не согласование...
как сие оптимизировать, можете подсказать...
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.05.2019, 01:24
Ответы с готовыми решениями:

Как оптимизировать код DataGridView (SQLite)?
Вопрос в том,как из этого говно кода сделать,чтото похожее на нормальную реализацию Принцип работы такой Подключаемся к файлу базы с...

Взаимодействие SQLite и Xamarin.Forms
Здравствуйте, уважаемые форумчане! Я хотел разработать приложение под Android на Xamarin, которое использовало бы для хранения и...

Взаимодействие БД SQLite и приложения на Windows Forms
Доброй ночи вам, обитатели форума. Появилась проблема, склеить БД с SQLite в мою Windows Forms апликацию, Visual Studio '10. Как это...

4
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,301
30.05.2019, 03:56
Цитата Сообщение от Серый_Ветер Посмотреть сообщение
питон начинает сыпать ошибками ссылаясь на эту строку:
Хорошо бы еще текст ошибки, а то неизвестно, что в этих таблицах

а так, можно вот так сделать

Python
1
2
3
4
5
for i in tmp:
        try:
            bg[i[1]].append((tech[i[2]]['id'], tech[i[2]]['name']))
        except:
            pass
0
 Аватар для Серый_Ветер
21 / 21 / 12
Регистрация: 09.01.2013
Сообщений: 456
30.05.2019, 20:43  [ТС]
Цитата Сообщение от tooru Посмотреть сообщение
Хорошо бы еще текст ошибки, а то неизвестно, что в этих таблицах
идентификаторы полей таблицы

Цитата Сообщение от tooru Посмотреть сообщение
а так, можно вот так сделать
похоже я не там копать начал...

оно конечно работает, ошибку не дает, но не так надо

имею:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    ..........
    type_tech = request.query.get('type_tech', '').decode('utf-8')
    where = ' WHERE name = "%s"' % (type_tech) if type_tech else ''
    cur.execute('SELECT * FROM tech'+ where +' ORDER BY id ASC')
    tech = dict((i[0], {'id': i[0], 'name': i[1]}) for i in cur.fetchall())
 
    cur.execute('SELECT * FROM bug_tech')
    tmp = cur.fetchall()
    bg = dict((i[1], []) for i in tmp)
    for i in tmp:
        try:
           bg[i[1]].append((tech[i[2]]['id'], tech[i[2]]['name']))
        except:
           pass
 
    db.close()
    return template('bugs', rows=rows, tech=tech, bg=bg)
и такую конструкцию шаблона html:
HTML5
1
2
3
4
5
6
7
             %for i in rows:
 
                      <tr>
                      <td>{{i[0]}}. {{i[1]}}</td>
                      <td>{{', '.join(j[1] for j in bg[i[0]]) if i[0] in bg.keys() else ''}}</td>
                      </tr>
                       % end
я хотел чтобы выводило результаты выборки всей согласно запроса, а выборка происходит только в во второй колонке.
0
 Аватар для Серый_Ветер
21 / 21 / 12
Регистрация: 09.01.2013
Сообщений: 456
02.06.2019, 00:46  [ТС]
Подскажите с условием проверки if на пустые данные...

вывод в консоль такой:
Python
1
2
3
4
[]
[(2, u'122323')]
[]
[]
условия вида:
Python
1
2
3
if bg[i[0]] is None:
if bg[i[0]] != None:
if bg[i[0]] != '':
ни к чему не привели.
0
Эксперт Pascal/Delphi
 Аватар для mmm_corp
103 / 91 / 32
Регистрация: 30.05.2015
Сообщений: 594
02.06.2019, 00:53
Лучший ответ Сообщение было отмечено Серый_Ветер как решение

Решение

[] - это масив, значит нужно проверять на его длинну, len(...) == 0...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.06.2019, 00:53
Помогаю со студенческими работами здесь

Как можно оптимизировать запрос выборки по двум датам из БД Sqlite?
Составил запрос по выборки максимальных значений из двух полей с датами, используя несколько связанных таблиц: SELECT...

Взаимодействие PHP с сервером баз данных SQLite
1. Опишите класс Eshop, в нем определите свойство $db для хранения объекта БД 2. В конструкторе сделайте проверку на существование файла...

Как можно оптимизировать код? Код считывает кол-во скобок
s = input() s = cheked = set() ans = 0 L = len(s) for l in range(L+1 if L % 2 else L, 1, -2): for i in range(L-l+1): ...

Перепишите пожалуйста код с питона на с++ или оптимизировать код
a = int(input()) b = int(input()) n = m = for i in range(1,a+1): n.append(i) m.append(i) while len(n) &gt; 1: if...

Как можно максимально оптимизировать данный код через логическое индексирование? Код полностью работает
header = data = , , , , , , , , , , , , ] import numpy as np def salary_info_purchased(data, gender=None, purchased=None): ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru