Python: чтение базы данных для отображения таблицы с одинаковыми столбцами - PullRequest
0 голосов
/ 02 мая 2019

У меня есть программа, которая в данный момент читает из базы данных, которую можно найти здесь .У меня есть пользователи, которые выбирают конкретную запись, которую они хотят отобразить, поэтому команда SQL выполнит эту запись.Теперь у меня есть таблица, которая в настоящее время отображает эти записи, однако столбцы не соответствуют моему желанию, потому что я имею дело с длинными строками данных.

Я не пользуюсь расширенными библиотеками.Отображение моей таблицы примерно одинаково для некоторых таблиц, кроме таблиц, таких как поставщики, заказы, категории.Ширина каждого столбца слишком велика.Это занимает слишком много места.

Я думаю, что мой код в настоящее время берет самую длинную строку из всей таблицы и устанавливает ширину для каждого столбца.Вместо этого я хочу взять самую длинную строку для каждого столбца, а НЕ для всей таблицы, поэтому ширина каждого столбца определяется длиной строки (с небольшим дополнительным пространством, конечно) для этого столбца.

Вот мой код:

import sqlite3

def read_display(record):
  database = 'data.db'
  connection = sqlite3.connect(database)
  c = connection.cursor()
  # selects a table to display
  sql = "SELECT * FROM {0}".format(record)
  cursor.execute(sql)
  conn.commit()
  results = cursor.fetchall()

  header = [i[0] for i in c.description]
  data = [header] + list(tuple(results))
  width = max((len(str(x)) for d in data for x in d))

  for i, d in enumerate(data):
      line = ' | '.join(str(x).ljust(width) for x in d)
      print(line)
      if i == 0:
         print('-' * len(line))

Я пытался связываться с переменной width, но, похоже, не могу понять это.Я попытался посмотреть на другие StackOverflow q, но они имеют дело с небольшим количеством данных, поэтому легче установить ширину.Эти данные содержат огромные строки.

Спасибо большое!

1 Ответ

0 голосов
/ 02 мая 2019

Комментарий : что означает _ в # 2 ?

Чтение Какова цель использования единственной подчеркивания «_» в Python?
Здесь "3. В качестве" одноразового "имени переменной общего назначения" нам не нужно значение range(....


Вопрос : отображать записи базы данных в виде таблицы с равными столбцами

  1. Получить имена столбцов и добавить их к results.

        header = tuple(i[0] for i in cur.description)
        data = [header] + results
    
  2. Инициация config как list с {'width':0}.
    Создайте столько dict элементов, сколько столбцов в таблице базы данных.

        config = [{'width':0} for _ in range(len(data[0]))]
    
  3. Зацикливание данных целом , что составляет list из tuple.
    Найдите max len и сохраните его в столбцах config dict

        for rec in data:
            for c, value in enumerate(rec):
                config[c]['width'] = max(config[c]['width'], len(str(value)))
    
  4. Подготовьте format list, используя width из config

        format_ = []
        for f in config:
            format_.append('{:<' + str(f['width']) + '}')
    
  5. Преобразуйте list format_ в str, используя '|' в качестве разделителя.

        format_ = ' | '.join(format_)
    
  6. Цикл data, list из tuple, печать с использованием строки format_.

        for rec in data:
            print(format_.format(*rec))
    

Протестировано на Python: 3,5

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