RSS
 

База данных, содержащая список url

07 Дек


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

В целом задача состоит в том , чтобы создать базу с совокупностью адресов страниц, кратким описанием и непосредственно вторую базу данных с категориями.
Так из этой задачи можно вырастить небольшой софт. Самым важным здесь будет непосредственно умение записывать информацию , а так же создавать модель отношения между непосредственно основным окном программы и самих полей таблиц. Ну что – ж приступим .
База данных содержит две таблицы :description,tagss.

Следующие команды позволяют непосредственно позволяют подключить нужные нам для работы модули.
За графическое отображение отвечает модуль
PyQt4.QtGui и всё, что из него импортируется.

import os
import sys
from PyQt4.QtCore import (QDate, QDateTime, QFile, QString, QVariant, Qt,
        SIGNAL)
from PyQt4.QtGui import (QApplication, QCursor, QDataWidgetMapper,
        QDateTimeEdit,QComboBox, QDialog, QGridLayout, QHBoxLayout, QIcon, QLabel,        QTextEdit,QLineEdit, QMessageBox, QPixmap, QPushButton, QVBoxLayout)
from PyQt4.QtSql import (QSqlRelation,QSqlRelationalTableModel,QSqlRelationalDelegate,QSqlDatabase, QSqlQuery, QSqlTableModel)

За внешний вид отвечают слои и те виджеты которые на эти слои мы и распределяем. И конечно всё что мы будем отображать на форме отвечает класс Urls. Дальше пойдет описание его методов и свойств, необходимых для взаимодействия и отображения базы данных.

class Urls(QDialog):
	def __init__(self,parent=None):
		super(Articles,self).__init__(parent)
		#creation Layout(http://lifeisfine.ru)
		layout=QGridLayout()
		self.lineeditn=QLineEdit()
		self.labeln=QLabel("url")
		layout.addWidget(self.labeln,1,0)
		layout.addWidget(self.lineeditn,1,1)

Ниже приведён код, содержащий слой с кнопками.
Отдельно в папку где располагается скрипт следует также скопировать папку images. В этой папке содержатся изображения кнопок. В целом обычно следует использовать файл ресурсов,но в ряде случаев не всегда срабатвает эта опция. Поэтому подключаю напрямую.

                firstButton=QPushButton()
		firstButton.setIcon(QIcon("./images/first.png"))
		prevButton=QPushButton()
		prevButton.setIcon(QIcon("./images/prev.png"))
		nextButton=QPushButton()
		nextButton.setIcon(QIcon("./images/next.png"))
		lastButton=QPushButton()
		lastButton.setIcon(QIcon("./images/last.png"))
		addButton=QPushButton("&Add")
		addButton.setIcon(QIcon("./images/add.png"))
		deleteButton=QPushButton("&Delete")
		deleteButton.setIcon(QIcon("./images/quit.png"))
		quitButton=QPushButton("&Quit")
		quitButton.setIcon(QIcon("./images/quit.png"))

Задаём модель взаимодействия с базой данных. Вместо того, чтобы по нажатию кнопок вызывать определённый набор команд, будем использовать свойства самого языка python.
А именно просто операции взаимодействия с моделью.
Модель будет реляционной, так как у нас присутствует взаимодействие между базой description и
tagss.

                self.model=QSqlRelationalTableModel(self)
		self.model.setTable("description")
	        self.model.setRelation(tagsid,
                      QSqlRelation("tagss","id","name"))
 
		self.model.select()

Теперь после того, как мы задали модель, необходимо создать функционал взаимодействия. Здесь мы просто соединяем наши виджеты и переменные самой базы данных.

                self.mapper=QDataWidgetMapper(self)
		self.mapper.setSubmitPolicy
(QDataWidgetMapper.ManualSubmit)
	        self.mapper.setModel(self.model)
		self.mapper.setItemDelegate(QSqlRelationalDelegate(self))
		self.mapper.addMapping(self.lineeditn,url)
		self.mapper.addMapping(self.lineeditt,tags)
	        self.mapper.addMapping(self.lineedita, ip)
	        self.mapper.addMapping(self.lineeditj, zone)
	        self.mapper.addMapping(self.lineeditd,descriptiona)

Код связанный с сигналом управления одной из кнопок .
Здесь описан переход на последнюю запись таблицы.
Сначала мы сохраняем текущую запись модели в базу данных, ассоциированную с ней. Затем задаём предпоследний ряд.
И затем устанавливаем отображение содержимого последнего ряда таблицы базы данных.

                def saveRecordL(self):
                self.mapper.submit()
                print(row)
		row = int(self.model.rowCount()-1)
                self.mapper.setCurrentIndex(row)

Как вы видите все операции производятся с использованием свойств модели натянутой на базу description.

Смотрите видео, для лучшего понимая материала изложенного выше:
Часть 1(Постановка задачи)

Часть 2 (Продолжение объяснения кода. Пример использования.)

Код с программой содержится здесь

Google Bookmarks Reddit Technorati Yahoo My Web БобрДобр.ru Memori.ru МоёМесто.ru
 

Прокомментировать

 
 
 
Система Orphus

Enter your email address:

Delivered by FeedBurner

.