Sqlite Where komutu

Merhaba,

Veritabanımdaki bilgileri Where komutu ile sorguladıktan sonra ortaya çıkan tabloyu, PyQt5 ile tablewidget nesnesi üzerinde nasıl gösterebilirim? Yardımlarınızı rica ederim.

Merhaba;

Şu konuyu incelediniz mi?

Merhaba,

Bahsettiğiniz konu, tam olarak istediğimi karşılamıyor. Yaptığım çalışmanın ilgili kısmını paylaşayım sizinle.
Aşağıdaki fonksiyon, yapmış olduğum sınıfın bir parçasıdır.
Where komutu ile sorguladığım şeyi, print ile ekrana yazdırabiliyorum. Ama tablewidget üzerinde gösteremiyorum. Yardımlarınızı rica ederim.

def find_equipment(self):
    self.ui_equipments_tys.tableWidget_ara.clear()

    self.ara = self.ui_equipments_tys.lineEdit_ara.text()
   
    if self.ara is not None:
        self.ui_equipments_tys.butn_ara.setEnabled(True)
    else:
        self.ui_equipments_tys.butn_ara.setEnabled(False)

    self.vT = sqlite3.connect("Ekipman_PA.db")
    self.iM = self.vT.cursor()
    table = "Select * From Equipment_List WHERE BARCODE_NO=? OR SERIAL_NO=? OR EQUIPMENT_CODE=? OR DESCRIPTION=? OR EQUIPMENT_TYPE_DESCRIPTION=? " \
            "OR TRADEMARK=? OR MODEL=? OR PRODUCTION_YEAR=? OR LOCATION=? OR EFFECT_AREA=? OR GUARANTEE_START=? OR GUARANTEE_END=? OR POWER=? OR " \
            "VOLTAGE=? OR CAPACITY=? OR FEED_PANEL_CODE=? OR MAINTENANCE_PERIOD=?"
    self.sonuc = self.iM.execute(table, (self.ara, self.ara, self.ara, self.ara, self.ara, self.ara, self.ara, self.ara, self.ara, self.ara,
                                         self.ara, self.ara, self.ara, self.ara, self.ara, self.ara, self.ara,))
    result = self.iM.fetchall()
    self.columns_number = len(result[0])
    self.row_number = len(result)

  
    if len(result) <= 0:
        msg = QMessageBox(self)
        msg.setIcon(QMessageBox.Warning)
        msg.setText("Aradığınız Kayıt Bulunamadı.. ")
        msg.setWindowTitle("Üzgünüm!")
        msg.setStandardButtons(QMessageBox.Ok)
        msg.show()
        value = msg.exec()
        if value == QMessageBox.Ok:
            self.ui_equipments_tys.lineEdit_ara.clear()

    elif len(result) >= 0:
        self.ui_equipments_tys.tableWidget_ara.setColumnCount(self.columns_number)
        self.ui_equipments_tys.tableWidget_ara.setRowCount(self.row_number)
        self.ui_equipments_tys.tableWidget_ara.setHorizontalHeaderLabels(('BARCODE_NO', 'SERIAL_NO', 'EQUIPMENT_CODE',
                                                                          'DESCRIPTION', 'EQUIPMENT_TYPE_DESCRIPTION',
                                                                          'TRADEMARK', 'MODEL', 'PRODUCTION_YEAR',
                                                                          'LOCATION', 'EFFECT_AREA', 'GUARANTEE_START',
                                                                          'GUARANTEE_END', 'POWER', 'VOLTAGE',
                                                                          'CAPACITY', 'FEED_PANEL_CODE',
                                                                          'MAINTENANCE_PERIOD'))

        self.ui_equipments_tys.tableWidget_ara.setColumnWidth(0, 130)
        self.ui_equipments_tys.tableWidget_ara.setColumnWidth(1, 130)
        self.ui_equipments_tys.tableWidget_ara.setColumnWidth(2, 150)
        self.ui_equipments_tys.tableWidget_ara.setColumnWidth(3, 140)
        self.ui_equipments_tys.tableWidget_ara.setColumnWidth(4, 250)
        self.ui_equipments_tys.tableWidget_ara.setColumnWidth(5, 140)
        self.ui_equipments_tys.tableWidget_ara.setColumnWidth(6, 150)
        self.ui_equipments_tys.tableWidget_ara.setColumnWidth(7, 150)
        self.ui_equipments_tys.tableWidget_ara.setColumnWidth(8, 140)
        self.ui_equipments_tys.tableWidget_ara.setColumnWidth(9, 150)
        self.ui_equipments_tys.tableWidget_ara.setColumnWidth(10, 160)
        self.ui_equipments_tys.tableWidget_ara.setColumnWidth(11, 140)
        self.ui_equipments_tys.tableWidget_ara.setColumnWidth(12, 130)
        self.ui_equipments_tys.tableWidget_ara.setColumnWidth(13, 130)
        self.ui_equipments_tys.tableWidget_ara.setColumnWidth(14, 140)
        self.ui_equipments_tys.tableWidget_ara.setColumnWidth(15, 160)
        self.ui_equipments_tys.tableWidget_ara.setColumnWidth(16, 180)

        # self.ui_equipments_tys.tableWidget_ara.setRowCount(0)
        for satirIndeks, satirVeri in enumerate(self.sonuc):
            self.ui_equipments_tys.tableWidget_ara.insertRow(satirIndeks)
            for sutunIndeks, sutunVeri in enumerate(satirVeri):
                self.ui_equipments_tys.tableWidget_ara.insertColumn(sutunIndeks)

                self.ui_equipments_tys.tableWidget_ara.setItem(satirIndeks, sutunIndeks, QTableWidgetItem(str(sutunVeri)))
                #print(f'barcode_no:\t{result[i][0]}\nserial_no:\t{result[i][1]}\nequipment_code:\t{result[i][2]}\ndescription:\t{result[i][3]}\nequipment_type_description:\t{result[i][4]}\ntrademark:\t{result[i][5]}\nmodel:\t{result[i][6]}\nproduction_year:\t{result[i][7]}\nlocation:\t{result[i][8]}\neffect_area:\t{result[i][9]}\nguarantee_start:\t{result[i][10]}\nguarantee_end:\t{result[i][11]}\npower:\t{result[i][12]}\nvoltage:\t{result[i][13]}\ncapacity:\t{result[i][14]}\nfeed_panel_code:\t{result[i][15]}\nmaintenance_period:\t{result[i][16]}')

    self.vT.commit()
    self.vT.close()

Biliyorum, nasıl yapacağınız hakkında hiçbir fikriniz yokmuş gibi sordunuz, o yüzden bir fikir vermesi için söyledim.

Burada “gösteremiyorum” kelimesi bir çok anlama gelebilir. Hata alıyor musunuz? Tam olarak problemin ne olduğunu söylemelisiniz.

Kodlarda ilk dikkatimi çeken, sütunları genişletmek için yaptığınız kod tekrarları oldu. Bunun pratik bir yolu mevcut ama buna asıl problemi çözdükten sonra değinelim.

Tam olarak database’den çekilen data’lara benzeyen (özellikle de yapı olarak) minimalist bir örnek verirseniz çok iyi olur. Elimizde ne var, bilmemiz gerek.

table = "Select * From Equipment_List WHERE BARCODE_NO=? OR SERIAL_NO=? OR EQUIPMENT_CODE=? OR DESCRIPTION=?"
satır=0
for  BARCODE_NO, SERIAL_NO, EQUIPMENT_CODE, DESCRIPTION in self.İM.execute(table, (self.ara, self.ara, self.ara, self.ara,)):
    self.QTableWidgetimiz.setItem(satır,0, QTableWidgetItem(BARCODE_NO))
    self.QTableWidgetimiz.setItem(satır,1, QTableWidgetItem(SERIAL_NO))
    self.QTableWidgetimiz.setItem(satır,2, QTableWidgetItem(EQUIPMENT_CODE))
    self.QTableWidgetimiz.setItem(satır,3, QTableWidgetItem(DESCRIPTION))
    # veri döndükçe satır sayısı arttırılır.
    satır+=1

Bu düzende yapabileceğini düşünüyorum. Senin projendeki sutun sayısına göre düzenlersin.

Öncelikle teşekkürler ilginiz için. Benim bahsettiğim kod yazmak değil aslında, bunun yerine sürükle bırak ile olup olmadığı meselesi problem. Excel den veya veritabanından verileri çekmekte problem yaşayacağımı düşünmüyorum.

Burada neredeyse herkes programlama üzerine kendine geliştirmeye çalışıyor. Dolayısıyla aklıma ilk gelen şeylerden biri kod yazmak oluyor.

QTableWidget’ın bahsettiğiniz şekilde (birden fazla hücreye) paste özelliği maalesef yok.

Haklıısınız ben de öyle yapmaya çalışıyorum. Yazdığım program okulumda idareciler tarafından kullanılacak. Onlar için kolaylık olacağını düşünmüştüm. Fakat excel den çekeceğim verileri. En kestirme çözüm yolu bu gözüküyor.

Sayın ggns7,

Bahsettiğim konu ile ilgili bir hata almıyorum. Biraz daha açıklayıcı olması bakımından yorumuma bir kaç fotoğraf ekliyorum. Pyqt5 ekran görüntüsü ve Konsolda çalıştırırken print ile ekrana yazdığım datanın görüntüsü. Problemi anlamak için fikir vereceğini düşünüyorum. Tekrar dönüşlerinizi rica ederim.


İşte görmek istediğim şey bu idi. Data’ların yapısını bilmek önemli

Küçük bir örnek hazırladım, kendi kodlarınıza kolaylıkla entegre edebileceğinizi düşünüyorum.

import sys
from PySide2.QtWidgets import*
from PySide2.QtCore import*
from PySide2.QtGui import*


class Deneme(QMainWindow):
	def __init__(self):
		super(Deneme, self).__init__()
		self.resize(600,400)

		self.widget = QWidget()
		self.tableWidget = QTableWidget()

		data = [
		(tuple("ilk veriler "+str(x) for x in range(10))),
		(tuple("ikinci veriler "+str(x) for x in range(10)))]
		
		self.tableWidget.setColumnCount(len(data[0]))
		self.tableWidget.setRowCount(len(data))

		for i in range(len(data)):
			for r in data[i]:
				self.tableWidget.setItem(i,data[i].index(r), QTableWidgetItem(r))

		self.layout = QVBoxLayout()
		self.layout.addWidget(self.tableWidget)

		self.widget.setLayout(self.layout)
		self.setCentralWidget(self.widget)


if __name__ == "__main__":
	app = QApplication(sys.argv)
	window = Deneme()
	window.show()
	sys.exit(app.exec_())

Sorun Çözüldü.

result nesnesi, aşağıda self.sonuc yazan yere yapıştırıldı. Arama sonuçlarımı Tablewidget nesnesi üzerinde görebiliyorum.
Teşekkürler.