Создание отсортированной базы данных sqlite с помощью python - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь создать базу данных с именем «Counts», которая отслеживает, сколько раз конкретный адрес электронной почты отправлял письмо.Данные анализируются из текстового файла, и база данных создается с использованием Python.

Мой код выглядит так:

 import sqlite3
 conn = sqlite3.connect('emaildb.sqlite')
 cur = conn.cursor()
 cur.execute('DROP TABLE IF EXISTS Counts')
 cur.execute('''CREATE TABLE Counts (email TEXT, count INTEGER)''')
 fname = input('Enter file name: ')
 fh = open(fname)
 for line in fh:
    if not line.startswith("From"): continue
    pieces = line.split()
    email = pieces[1]
    cur.execute('SELECT count FROM Counts WHERE email= ? ', (email,))
    row = cur.fetchone()
    if row is None:
        cur.execute('''INSERT INTO Counts (email, count)
            VALUES (?, 1)''', (email,))
    else:
        cur.execute('UPDATE Counts SET count = count + 1 WHERE email= ?',(email,))
cur.execute('SELECT * FROM Counts ORDER BY count DESC')
conn.commit()

Код создает отлично работающую базу данных, но она не упорядочена.Используя вышеупомянутую команду

`"SELECT * FROM Counts ORDER BY count DESC"` 

, я могу отсортировать базу данных в sqlitebrowser.Каким-то образом это не работает, когда интегрировано в код Python, хотя я использую коммит после команды упорядочения.

Заранее спасибо.

1 Ответ

0 голосов
/ 25 апреля 2018

Команда cur.execute('SELECT * FROM Counts ORDER BY count DESC') не меняет порядок самой базы данных, она просто упорядочивает результаты оператора select.

В сущности, оператор SELECT ничего не меняет.Он просто возвращает список строк, которые вы запрашиваете.

Если вы хотите изменить порядок строк в базе данных, вам нужно использовать для этого команды UPDATE или INSERT, но в вашем случае вы, вероятно, не хотите этого делатьэтот.Лучше всего каждый раз заказывать результаты, используя ORDER BY.

Из-за того, как работает sqlite, обычно не стоит полагаться на порядок сохранения результатов в базе данных.Дополнительную информацию о том, как строки упорядочены в sqlite, можно найти в документации: https://www.sqlite.org/rowidtable.html

В таблицах sqlite по умолчанию используется 'rowid'.

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