Как запросить SQLite 3 в Python, который находится в списке - PullRequest
0 голосов
/ 26 июня 2018
import feedparser
import re
import smtplib
import sqlite3
import time
from datetime import date

db = sqlite3.connect('nvd.db')
c = db.cursor()


def read_from_db():

    read_from_db_list = []
    c.execute('SELECT product_name FROM product')
    for row in c.fetchall():
        read_from_db_list.append(row[0])

    return read_from_db_list


if 'windows' in read_from_db():
    print('i have windows')

Когда я запускаю это, мне ничего не возвращают. Но если в функции read_from_db() я добавлю print(read_from_db_list) и просто вставлю функцию в конец скрипта, она выведет мне все объекты в списке.

Я просто хочу иметь возможность запрашивать БД и проверять наличие там определенных ключевых слов.

примечание: в базе данных есть 7 совпадений "окон".

edit: в функции я пробовал read_from_db_list.append((row)) и read_from_db_list.append(row) aswell

вот как выглядит моя БД:

https://s8.postimg.cc/u73jx3cet/image.png

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Пожалуйста, попробуйте этот код:

import feedparser
import re
import smtplib
import sqlite3
import time
from datetime import date

db = sqlite3.connect('nvd.db')
c = db.cursor()


def read_from_db():

    read_from_db_list = []
    c.execute('SELECT product_name FROM product')
    for row in c.fetchall():
        read_from_db_list.append([row])

    return read_from_db_list

for data in read_from_db():
    if 'windows' in data[0]:
        print('i have windows')
0 голосов
/ 26 июня 2018

Ваш код не будет работать, потому что вы создаете список, содержащий списки, выполнив read_from_db_list.append([row]). Очевидно, что оператор in не найдет строку windows внутри списка, который содержит списки. Плюс, результат, который вы получите от c.fetchall(), это кортежи, поэтому вам нужно сначала развернуть их, чтобы получить ваши столбцы. Заменить

read_from_db_list.append([row])

от

read_from_db_list.append(row[0])

и это сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...