def __init__(self, database, parent=None): super(SqliteTablesWidget, self).__init__(parent) self.setColumnCount(2) self.setHorizontalHeaderLabels(["Table", "Number of rows"]) self.verticalHeader().setVisible(False) self.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) self.setShowGrid(False) self.setSortingEnabled(True) sqlitedriver = ModuleProcessusManager().get('SqliteDB') query = 'SELECT tbl_name FROM sqlite_master where type="table";' tables = sqlitedriver.executeFrom(database, query) if tables is not None: idx = self.rowCount() for table in tables: self.setRowCount(idx + 1) query = "select count(*) from {}".format(table[0]) counter = sqlitedriver.executeFrom(database, query) count = 0 if counter: data = counter.fetchone() if data is not None and len(data) > 0: count = data[0] nameItem = QtGui.QTableWidgetItem() nameItem.setText(QtCore.QString.fromUtf8(table[0])) countItem = SqliteTablesCountItem(count) self.setItem(idx, 0, nameItem) self.setItem(idx, 1, countItem) idx += 1 self.resizeColumnsToContents()
def populate(self, database, query): self.clear() self.setColumnCount(0) self.setRowCount(0) sqlitedriver = ModuleProcessusManager().get('SqliteDB') try: rows = sqlitedriver.executeFrom(database, query) except apsw.Error: return try: descriptions = rows.getdescription() # if there's no row, this exception is thrown except apsw.ExecutionCompleteError: return header = [] for description in descriptions: header.append(description[0]) self.setColumnCount(len(header)) self.setHorizontalHeaderLabels(header) for idx in xrange(0, len(header)): self.horizontalHeaderItem(idx).setTextAlignment( QtCore.Qt.AlignLeft) finished = False idx = 0 # we use next to be able to continue if there's an error while getting # one row. while not finished: try: row = rows.next() self.setRowCount(idx + 1) for column, data in enumerate(row): if self.__isDate(descriptions[column][0]): item = SqliteRowItemWidget(data, descriptions[column][1], True) else: item = SqliteRowItemWidget(data, descriptions[column][1]) self.setItem(idx, column, item) idx += 1 except StopIteration: finished = True except apsw.Error: continue self.resizeColumnsToContents()