<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=Pyqt_db_%EC%97%B0%EA%B2%B0</id>
	<title>Pyqt db 연결 - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=Pyqt_db_%EC%97%B0%EA%B2%B0"/>
	<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=Pyqt_db_%EC%97%B0%EA%B2%B0&amp;action=history"/>
	<updated>2026-05-17T11:11:21Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=Pyqt_db_%EC%97%B0%EA%B2%B0&amp;diff=17&amp;oldid=prev</id>
		<title>Devcafe: 새 문서: == PYQT5 SQL CRUD 프로그램 ==  === 테이블 DDL === SQLITE3 &lt;source lang=sql&gt; create table field ( 	id Integer 		primary key autoincrement, 	Name Text, 	Surname Text, 	DOB Text, 	Phone Text ); &lt;/source&gt;  === main.py [메인 APP] === &lt;source lang=python&gt; import sys from ui import * from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox, QTableView from PyQt5 import QtSql from PyQt5 import QtCore  class form(QMainWindow):     def __init__(self):         super().__...</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=Pyqt_db_%EC%97%B0%EA%B2%B0&amp;diff=17&amp;oldid=prev"/>
		<updated>2024-10-04T14:10:58Z</updated>

		<summary type="html">&lt;p&gt;새 문서: == PYQT5 SQL CRUD 프로그램 ==  === 테이블 DDL === SQLITE3 &amp;lt;source lang=sql&amp;gt; create table field ( 	id Integer 		primary key autoincrement, 	Name Text, 	Surname Text, 	DOB Text, 	Phone Text ); &amp;lt;/source&amp;gt;  === main.py [메인 APP] === &amp;lt;source lang=python&amp;gt; import sys from ui import * from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox, QTableView from PyQt5 import QtSql from PyQt5 import QtCore  class form(QMainWindow):     def __init__(self):         super().__...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== PYQT5 SQL CRUD 프로그램 ==&lt;br /&gt;
&lt;br /&gt;
=== 테이블 DDL ===&lt;br /&gt;
SQLITE3&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;&lt;br /&gt;
create table field&lt;br /&gt;
(&lt;br /&gt;
	id Integer&lt;br /&gt;
		primary key autoincrement,&lt;br /&gt;
	Name Text,&lt;br /&gt;
	Surname Text,&lt;br /&gt;
	DOB Text,&lt;br /&gt;
	Phone Text&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== main.py [메인 APP] ===&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
from ui import *&lt;br /&gt;
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox, QTableView&lt;br /&gt;
from PyQt5 import QtSql&lt;br /&gt;
from PyQt5 import QtCore&lt;br /&gt;
&lt;br /&gt;
class form(QMainWindow):&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        super().__init__()&lt;br /&gt;
        self.ui = Ui_MainWindow()&lt;br /&gt;
        self.ui.setupUi(self)&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot; 1.DB 접속 &lt;br /&gt;
        QMYSQL	MySQL Driver&lt;br /&gt;
        QOCI	Oracle Call Interface Driver&lt;br /&gt;
        QODBC	ODBC Driver (includes Microsoft SQL Server)&lt;br /&gt;
        QPSQL	PostgreSQL Driver&lt;br /&gt;
        QSQLITE	SQLite version 3 or above&lt;br /&gt;
        QSQLITE2	SQLite version 2       &lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.db = QtSql.QSqlDatabase.addDatabase(&amp;#039;QSQLITE&amp;#039;)&lt;br /&gt;
        self.db.setDatabaseName(&amp;#039;fieldlist.db&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot; 2.테이블 선택 &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.model = QtSql.QSqlTableModel()&lt;br /&gt;
        self.model.setTable(&amp;#039;field&amp;#039;)&lt;br /&gt;
        self.model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot; 3. SELECT 쿼리 &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.model.select()&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot; 4. 그리드 헤더 &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.model.setHeaderData(0, QtCore.Qt.Horizontal,&amp;quot;id&amp;quot;)&lt;br /&gt;
        self.model.setHeaderData(1, QtCore.Qt.Horizontal,&amp;quot;Name&amp;quot;)&lt;br /&gt;
        self.model.setHeaderData(2, QtCore.Qt.Horizontal, &amp;quot;Surname&amp;quot;)&lt;br /&gt;
        self.model.setHeaderData(3, QtCore.Qt.Horizontal, &amp;quot;DOB&amp;quot;)&lt;br /&gt;
        self.model.setHeaderData(4, QtCore.Qt.Horizontal,&amp;quot;Phone&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot; 5.테이블 위젯에 데이터 바인딩 처리 &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.ui.tableWidget.setModel(self.model)&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot; 6.버튼 추가/수정/삭제 이벤트 처리 &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.ui.pushButton.clicked.connect(self.addToDb)&lt;br /&gt;
        self.show()&lt;br /&gt;
        self.ui.pushButton_2.clicked.connect(self.updaterow)&lt;br /&gt;
        self.ui.pushButton_3.clicked.connect(self.delrow)&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot; 7.테이블 건수 조회 / 화면에 표시 &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.i = self.model.rowCount()&lt;br /&gt;
        self.ui.lcdNumber.display(self.i)&lt;br /&gt;
&lt;br /&gt;
        print(self.ui.tableWidget.currentIndex().row())&lt;br /&gt;
&lt;br /&gt;
    def addToDb(self):&lt;br /&gt;
        print(self.i)&lt;br /&gt;
        self.model.insertRows(self.i,1)&lt;br /&gt;
        self.model.setData(self.model.index(self.i,1),self.ui.lineEdit.text())&lt;br /&gt;
        self.model.setData(self.model.index(self.i, 2), self.ui.lineEdit_2.text())&lt;br /&gt;
        self.model.setData(self.model.index(self.i,4), self.ui.lineEdit_3.text())&lt;br /&gt;
        self.model.setData(self.model.index(self.i,3), self.ui.dateEdit.text())&lt;br /&gt;
        self.model.submitAll()&lt;br /&gt;
        self.i += 1&lt;br /&gt;
        self.ui.lcdNumber.display(self.i)&lt;br /&gt;
&lt;br /&gt;
    def delrow(self):&lt;br /&gt;
        if self.ui.tableWidget.currentIndex().row() &amp;gt; -1:&lt;br /&gt;
            self.model.removeRow(self.ui.tableWidget.currentIndex().row())&lt;br /&gt;
            self.i -= 1&lt;br /&gt;
            self.model.select()&lt;br /&gt;
            self.ui.lcdNumber.display(self.i)&lt;br /&gt;
        else:&lt;br /&gt;
            QMessageBox.question(self,&amp;#039;Message&amp;#039;, &amp;quot;Please select a row would you like to delete&amp;quot;, QMessageBox.Ok)&lt;br /&gt;
            self.show()&lt;br /&gt;
&lt;br /&gt;
    def updaterow(self):&lt;br /&gt;
        if self.ui.tableWidget.currentIndex().row() &amp;gt; -1:&lt;br /&gt;
            record = self.model.record(self.ui.tableWidget.currentIndex().row())&lt;br /&gt;
            record.setValue(&amp;quot;Name&amp;quot;,self.ui.lineEdit.text())&lt;br /&gt;
            record.setValue(&amp;quot;Surname&amp;quot;,self.ui.lineEdit_2.text())&lt;br /&gt;
            record.setValue(&amp;quot;DOB&amp;quot;, self.ui.dateEdit.text())&lt;br /&gt;
            record.setValue(&amp;quot;Phone&amp;quot;, self.ui.lineEdit_3.text())&lt;br /&gt;
            self.model.setRecord(self.ui.tableWidget.currentIndex().row(), record)&lt;br /&gt;
        else:&lt;br /&gt;
            QMessageBox.question(self,&amp;#039;Message&amp;#039;, &amp;quot;Please select a row would you like to update&amp;quot;, QMessageBox.Ok)&lt;br /&gt;
            self.show()&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;#039;__main__&amp;#039;:&lt;br /&gt;
    app = QApplication(sys.argv)&lt;br /&gt;
    frm = form()&lt;br /&gt;
    sys.exit(app.exec_())&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ui.py [화면 UI] ===&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
# Form implementation generated from reading ui file &amp;#039;E:\uipython\pyqtex\pyqtdb\crud.ui&amp;#039;&lt;br /&gt;
#&lt;br /&gt;
# Created by: PyQt5 UI code generator 5.8.2&lt;br /&gt;
#&lt;br /&gt;
# WARNING! All changes made in this file will be lost!&lt;br /&gt;
&lt;br /&gt;
from PyQt5 import QtCore, QtGui, QtWidgets&lt;br /&gt;
&lt;br /&gt;
class Ui_MainWindow(object):&lt;br /&gt;
    def setupUi(self, MainWindow):&lt;br /&gt;
        MainWindow.setObjectName(&amp;quot;MainWindow&amp;quot;)&lt;br /&gt;
        MainWindow.resize(673, 578)&lt;br /&gt;
        self.centralwidget = QtWidgets.QWidget(MainWindow)&lt;br /&gt;
        self.centralwidget.setObjectName(&amp;quot;centralwidget&amp;quot;)&lt;br /&gt;
        self.groupBox = QtWidgets.QGroupBox(self.centralwidget)&lt;br /&gt;
        self.groupBox.setGeometry(QtCore.QRect(0, 0, 671, 261))&lt;br /&gt;
        self.groupBox.setObjectName(&amp;quot;groupBox&amp;quot;)&lt;br /&gt;
        self.lcdNumber = QtWidgets.QLCDNumber(self.groupBox)&lt;br /&gt;
        self.lcdNumber.setGeometry(QtCore.QRect(520, 10, 151, 81))&lt;br /&gt;
        self.lcdNumber.setObjectName(&amp;quot;lcdNumber&amp;quot;)&lt;br /&gt;
        self.label = QtWidgets.QLabel(self.groupBox)&lt;br /&gt;
        self.label.setGeometry(QtCore.QRect(10, 20, 47, 13))&lt;br /&gt;
        self.label.setObjectName(&amp;quot;label&amp;quot;)&lt;br /&gt;
        self.lineEdit = QtWidgets.QLineEdit(self.groupBox)&lt;br /&gt;
        self.lineEdit.setGeometry(QtCore.QRect(10, 40, 411, 20))&lt;br /&gt;
        self.lineEdit.setObjectName(&amp;quot;lineEdit&amp;quot;)&lt;br /&gt;
        self.label_2 = QtWidgets.QLabel(self.groupBox)&lt;br /&gt;
        self.label_2.setGeometry(QtCore.QRect(10, 70, 47, 13))&lt;br /&gt;
        self.label_2.setObjectName(&amp;quot;label_2&amp;quot;)&lt;br /&gt;
        self.lineEdit_2 = QtWidgets.QLineEdit(self.groupBox)&lt;br /&gt;
        self.lineEdit_2.setGeometry(QtCore.QRect(10, 90, 411, 20))&lt;br /&gt;
        self.lineEdit_2.setObjectName(&amp;quot;lineEdit_2&amp;quot;)&lt;br /&gt;
        self.label_3 = QtWidgets.QLabel(self.groupBox)&lt;br /&gt;
        self.label_3.setGeometry(QtCore.QRect(10, 120, 47, 13))&lt;br /&gt;
        self.label_3.setObjectName(&amp;quot;label_3&amp;quot;)&lt;br /&gt;
        self.lineEdit_3 = QtWidgets.QLineEdit(self.groupBox)&lt;br /&gt;
        self.lineEdit_3.setGeometry(QtCore.QRect(10, 140, 411, 20))&lt;br /&gt;
        self.lineEdit_3.setObjectName(&amp;quot;lineEdit_3&amp;quot;)&lt;br /&gt;
        self.label_4 = QtWidgets.QLabel(self.groupBox)&lt;br /&gt;
        self.label_4.setGeometry(QtCore.QRect(10, 180, 47, 13))&lt;br /&gt;
        self.label_4.setObjectName(&amp;quot;label_4&amp;quot;)&lt;br /&gt;
        self.dateEdit = QtWidgets.QDateEdit(self.groupBox)&lt;br /&gt;
        self.dateEdit.setGeometry(QtCore.QRect(10, 200, 411, 22))&lt;br /&gt;
        self.dateEdit.setObjectName(&amp;quot;dateEdit&amp;quot;)&lt;br /&gt;
        self.tableWidget = QtWidgets.QTableView(self.centralwidget)&lt;br /&gt;
        self.tableWidget.setGeometry(QtCore.QRect(0, 260, 671, 261))&lt;br /&gt;
        self.tableWidget.setObjectName(&amp;quot;tableWidget&amp;quot;)&lt;br /&gt;
        self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)&lt;br /&gt;
        self.scrollArea.setGeometry(QtCore.QRect(0, 520, 671, 41))&lt;br /&gt;
        self.scrollArea.setWidgetResizable(True)&lt;br /&gt;
        self.scrollArea.setObjectName(&amp;quot;scrollArea&amp;quot;)&lt;br /&gt;
        self.scrollAreaWidgetContents = QtWidgets.QWidget()&lt;br /&gt;
        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 669, 39))&lt;br /&gt;
        self.scrollAreaWidgetContents.setObjectName(&amp;quot;scrollAreaWidgetContents&amp;quot;)&lt;br /&gt;
        self.pushButton = QtWidgets.QPushButton(self.scrollAreaWidgetContents)&lt;br /&gt;
        self.pushButton.setGeometry(QtCore.QRect(10, 10, 75, 23))&lt;br /&gt;
        self.pushButton.setObjectName(&amp;quot;pushButton&amp;quot;)&lt;br /&gt;
        self.pushButton_2 = QtWidgets.QPushButton(self.scrollAreaWidgetContents)&lt;br /&gt;
        self.pushButton_2.setGeometry(QtCore.QRect(110, 10, 75, 23))&lt;br /&gt;
        self.pushButton_2.setObjectName(&amp;quot;pushButton_2&amp;quot;)&lt;br /&gt;
        self.pushButton_3 = QtWidgets.QPushButton(self.scrollAreaWidgetContents)&lt;br /&gt;
        self.pushButton_3.setGeometry(QtCore.QRect(210, 10, 75, 23))&lt;br /&gt;
        self.pushButton_3.setObjectName(&amp;quot;pushButton_3&amp;quot;)&lt;br /&gt;
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)&lt;br /&gt;
        MainWindow.setCentralWidget(self.centralwidget)&lt;br /&gt;
        self.statusbar = QtWidgets.QStatusBar(MainWindow)&lt;br /&gt;
        self.statusbar.setObjectName(&amp;quot;statusbar&amp;quot;)&lt;br /&gt;
        MainWindow.setStatusBar(self.statusbar)&lt;br /&gt;
&lt;br /&gt;
        self.retranslateUi(MainWindow)&lt;br /&gt;
        QtCore.QMetaObject.connectSlotsByName(MainWindow)&lt;br /&gt;
&lt;br /&gt;
    def retranslateUi(self, MainWindow):&lt;br /&gt;
        _translate = QtCore.QCoreApplication.translate&lt;br /&gt;
        MainWindow.setWindowTitle(_translate(&amp;quot;MainWindow&amp;quot;, &amp;quot;Simple CRUD(Create, Update, Delete)&amp;quot;))&lt;br /&gt;
        self.groupBox.setTitle(_translate(&amp;quot;MainWindow&amp;quot;, &amp;quot;Data&amp;quot;))&lt;br /&gt;
        self.label.setText(_translate(&amp;quot;MainWindow&amp;quot;, &amp;quot;Name&amp;quot;))&lt;br /&gt;
        self.label_2.setText(_translate(&amp;quot;MainWindow&amp;quot;, &amp;quot;Surname&amp;quot;))&lt;br /&gt;
        self.label_3.setText(_translate(&amp;quot;MainWindow&amp;quot;, &amp;quot;Phone&amp;quot;))&lt;br /&gt;
        self.label_4.setText(_translate(&amp;quot;MainWindow&amp;quot;, &amp;quot;DOB&amp;quot;))&lt;br /&gt;
        self.pushButton.setText(_translate(&amp;quot;MainWindow&amp;quot;, &amp;quot;Add&amp;quot;))&lt;br /&gt;
        self.pushButton_2.setText(_translate(&amp;quot;MainWindow&amp;quot;, &amp;quot;Update&amp;quot;))&lt;br /&gt;
        self.pushButton_3.setText(_translate(&amp;quot;MainWindow&amp;quot;, &amp;quot;Delete&amp;quot;))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 레퍼런스 URL ===&lt;br /&gt;
https://doc.qt.io/qtforpython/PySide2/QtSql/QSqlQueryModel.html#&lt;br /&gt;
https://doc.qt.io/qt-5/qsqldatabase.html&lt;br /&gt;
&lt;br /&gt;
[[category:python]]&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
</feed>