Сценарий вывода таблицы Python

scenarij vyvoda tablicy python Базы данных и постоянное хранение

После загрузки данных нам может потребоваться вывести их. Сценарий в примере 17.10 позволяет отображать результаты по мере их получения — он выводит таблицу целиком в простом виде (ее можно анализировать с помощью дополнительных инструментов) или форматированном (с помощью утилиты создания словарей записей, написанной нами ранее). Обратите внимание, что здесь вычисляется максимальный размер имен полей, чтобы реализовать выравнивание в выражении-генераторе; ширина поля вывода в выражении форматирования строки определяется символом звездочки (*).

Пример 17.10. PP4E\Dbase\Sql\dumpdb.py

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

dumpdb.py dbname? table? [-] (dash=formatted display)

def showformat(recs, sept=(‘-‘ * 40)): print(len(recs), ‘records’)

print(sept)

for rec in recs:

maxkey = max(len(key) for key in rec) # макс. длина ключа

for key in rec: # или: \t

print(‘%-*s => %s’ % (maxkey, key, rec[key])) # -ljust, *длина print(sept)

def dumpdb(cursor, table, format=True):

if not format:

cursor.execute(‘select * from ‘ + table) while True:

rec = cursor.fetchone() if not rec: break print(rec)

else:

from makedicts import makedicts

recs = makedicts(cursor, ‘select * from ‘ + table) showformat(recs)

if __name__ == ‘__main__’:

import sys

dbname, format, table = ‘dbase1’, False, ‘people’

cmdargs = sys.argv[1:]

if ‘-‘ in cmdargs: # форматировать, если ‘-‘ в арг. ком. строки

format = True # имя БД в другом аргументе ком. строки

cmdargs.remove(‘-‘)

if cmdargs: dbname = cmdargs.pop(0)

if cmdargs: table = cmdargs[0]

from loaddb import login

conn, curs = login(dbname)

dumpdb(curs, table, format)

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

Пример 17.11. PP4E\Dbase\Sql\makedb.py

физически удаляет и воссоздает файлы базы данных порядок использования: makedb.py dbname? tablename?

import sys

if input(‘Are you sure?’).lower() not in (‘y’, ‘yes’) sys.exit()

dbname = (len(sys.argv) > 1 and sys.argv[1]) or ‘dbase1’ table = (len(sys.argv) > 2 and sys.argv[2]) or ‘people’

from loaddb import login conn, curs = login(dbname) try:

curs.execute(‘drop table ‘ + table)

except:

print(‘database table did not exist’)

command = ‘create table %s (name char(30), job char(10), pay int(4))’ % table curs.execute(command)

conn.commit() # подтверждение здесь может быть необязательным

print(‘made‘, dbname, table)

Следующий сценарий, представленный в примере 17.12, очищает базу данных, удаляя все строки в таблице, вместо полного удаления таблицы и повторного ее создания. Для тестирования можно использовать любой из подходов. Небольшое предупреждение: атрибут rowcount в SQLite не всегда отражает количество удаленных строк — подробности смотрите в руководстве по библиотеке.

Пример 17.12. PP4E\Dbase\Sql\cleardb.py

удаляет все строки в таблице, но не удаляет таблицу в базе данных порядок использования: cleardb.py dbname? tablename?

import sys

if input(‘Are you sure?’).lower() not in (‘y’, ‘yes’) sys.exit()

dbname = sys.argv[1] if len(sys.argv) > 1 else ‘dbase1’ table = sys.argv[2] if len(sys.argv) > 2 else ‘people’

from loaddb import login

conn, curs = login(dbname)

curs.execute(‘delete from ‘ + table)

#print(curs.rowcount, ‘records deleted’) # соед. будет закрыто

#  методом __del__

#  подпись: conn.commit()иначе строки не будут удалены

Наконец, в примере 17.13 представлен инструмент командной строки, который выполняет запрос и выводит таблицу с результатами в форматированном виде. Это довольно короткий сценарий, потому что большую часть его задач мы уже автоматизировали. В значительной мере он просто объединяет существующие инструменты. Такова мощь повторного использования программного кода в Python.

Пример 17.13. PP4E\Dbase\Sql\querydb.py

выполняет строку запроса, выводит результаты в форматированном виде пример: querydb.py dbase1 "select name, job from people where pay > 50000" import sys

database, querystr = ‘dbase1’, ‘select * from people’

if len(sys.argv) > 1: database = sys.argv[1]

if len(sys.argv) > 2: querystr = sys.argv[2]

from makedicts import makedicts from dumpdb import showformat from loaddb import login

conn, curs = login(database) rows = makedicts(curs, querystr) showformat(rows)

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий