Vous êtes sur la page 1sur 14

 PAGES Search this site...

Mi diario Python
Blog Dedicado Al Lenguaje De Programación Python. Ejercicios Paso A Paso, Libros,
Tutoriales En Español, Traducción De Manuales En Ingles Y Alguna Cosa Mas...

 CATEGORIES    

BÚSQUEDAS PATROCINADAS

formatter sql sql examples

basic sql database python sqlite

Base de datos (SQLite) con PyQt5 - Interfaces gráficas


  9:39  5

Introducción:
Hola amigos de Internet, les doy la bienvenida Mi Diario Python, el mejor blog para Aprender
Python.

En este articulo veremos como manejar base de datos utilizando la librería PyQt5, la cual nos
permite crear interfaces gráficas con Python de manera fácil.

Puedes descargar PyQt5 utilizando Pypi: pip install PyQT5.

Crearemos una pequeña interfaz gráfica para poder manipular la base de datos, agregando y
eliminando datos. Todo utilizando el sistema SQLite.


Un poco de SQL:
Como mencione anteriormente, utilizaremos el sistema SQLite. Así que es bueno tener un poco de
conocimiento sobre las sentencias y funciones SQL.

Para crear tablas en SQL, se utiliza el siguiente comando:

CREATE TABLE 'personas';

Este comando, nos permite crear una tabla llamada "personas"

Con el siguiente comando, podremos solicitar todos los campos de la tabla personas:

SELECT * FROM Personas

Para inserar datos en una tabal personas, utilizaremos el siguiente comando:

INSERT INTO personas (nombre, apellido)


VALUES ('Luis', 'Salcedo');

Como pueden observar, con este comando decimos: insertar datos en la tabla personas, en los
campos nombre y apellido insertar "Luis" y "Salcedo".

Para eliminar datos, utilizamos el siguiente comando:



DELETE FROM personas WHERE nombre = 'Luis';

Con este comando, le indicamos que queremos eliminar todas las filas en donde el campo "nombre"
sea "Luis".

Estos comando serán los que utilizaremos en el día de hoy.

Ahora, realizaremos una interfaz gráfica con la que podremos manipular la base de datos.

Base de datos SQLite con PyQt5:


Puedes descargar y visualizar el código completo ingresando al siguiente
enlace: https://github.com/LuisAlejandroSalcedo/Base-de-datos-sqlite-pyqt5-python.

# Librerias necesarias
import sys
from PyQt5.QtSql import *
from PyQt5.QtCore import Qt, QModelIndex
from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout, QPushButton, \
QTableWidget, QTableWidgetItem, QMessageBox, QHBoxLayout, QLineEdit, QLabel, QGridLayout

# Creamos la clase que heredara métodos y componentes de QWidget


class PYQT_BD(QWidget):
def __init__(self, parent=None):
super(PYQT_BD, self).__init__(parent)

# Creamos una tabla en donde organizaremos los datos


self.table = QTableWidget(0, 3)
self.table.setHorizontalHeaderLabels(['ID', 'NOMBRE', 'APELLIDO']) # Tabla con 3 colu
mnas
self.table.setAlternatingRowColors(True)
self.table.setEditTriggers(QTableWidget.NoEditTriggers)
self.table.setSelectionBehavior(QTableWidget.SelectRows)
self.table.setSelectionMode(QTableWidget.SingleSelection)

self.lblID = QLabel("ID:") # Campo de texto para ingresar ID


self.txtID = QLineEdit()
self.txtID.setPlaceholderText("Numero identificador unico")


self.lblName = QLabel("Nombre:") # Campo de texto para ingresar nombre
self.txtName = QLineEdit()
self.txtName.setPlaceholderText("Nombre de la persona")

self.lblApellido = QLabel("Apellido:") # Campo de texto para ingresar apellido


self.txtApellido = QLineEdit()
self.txtApellido.setPlaceholderText("Apellido de la persona")

grid = QGridLayout() # Declaramo sun gridlayout en donde ingresaremos todos los widge
t
grid.addWidget(self.lblID, 0, 0)
grid.addWidget(self.txtID, 0, 1)
grid.addWidget(self.lblName, 1, 0)
grid.addWidget(self.txtName, 1, 1)
grid.addWidget(self.lblApellido, 2, 0)
grid.addWidget(self.txtApellido, 2, 1)

btnCargar = QPushButton('Cargar Datos') # Boton para cargar y mostrar los datos


btnCargar.clicked.connect(self.cargarDatos) # función al hacer click sobre el boton

btnInsertar = QPushButton('Insertar') # Boton agregar datos


btnInsertar.clicked.connect(self.insertarDatos) # función al hacer click sobre el bot
on

btnEliminar = QPushButton('Eliminar') # Boton para eliminar datos


btnEliminar.clicked.connect(self.eliminarDatos)

hbx = QHBoxLayout() # Declaramos un QHBoxLayout


# Agregamos los elementos al layout
hbx.addWidget(btnCargar)
hbx.addWidget(btnInsertar)
hbx.addWidget(btnEliminar)

vbx = QVBoxLayout()
vbx.addLayout(grid)
vbx.addLayout(hbx)
vbx.setAlignment(Qt.AlignTop)
vbx.addWidget(self.table)

self.setWindowTitle("PyQT - Base de datos (SQLite)") # Titulo de la ventana


self.resize(362, 320) # Tamaño de la ventana

self.setLayout(vbx) # Layout de la ventana
# Método para agregar datos a la base de datos
def cargarDatos(self, event):
index = 0
query = QSqlQuery() # Intancia del Query
# Ejecutamos el query "select * from personas"
# El cual nos devolvera todos los datos d ela tabla "personas"
query.exec_("select * from personas")

# Iteramos los datos recividos


while query.next():
ids = query.value(0) # ID
nombre = query.value(1) # NOMBRE
apellido = query.value(2) # APELLIDO

# Ahora organizamos los datos en la tabla creada anteriormente


self.table.setRowCount(index + 1)
self.table.setItem(index, 0, QTableWidgetItem(str(ids)))
self.table.setItem(index, 1, QTableWidgetItem(nombre))
self.table.setItem(index, 2, QTableWidgetItem(apellido))

index += 1

# Método para insertar datos en la base de datos


def insertarDatos(self, event):
# Obtenemos los valores de los campos de texto
ids = int(self.txtID.text())
nombre = self.txtName.text()
apellido = self.txtApellido.text()

query = QSqlQuery() # Instancia de Query


# Ejecutamos una sentencia para insertar los datos
# De los campos de texto
query.exec_("insert into personas values({0}, '{1}', '{2}')".format(ids, nombre, apel
lido))

# Mpetodo para eliminar datos d ela base de datos


def eliminarDatos(self, event):
# select = fila seleccionada en la tabla
selected = self.table.currentIndex()

if not selected.isValid() or len(self.table.selectedItems()) < 1:
return

ids = self.table.selectedItems()[0] # valor de tabla


query = QSqlQuery() # instancia de Query
# Ejecutamos una sentencia. Eliminara toda fila cuyo
# Valor de id sea igual al seleccionado
query.exec_("delete from personas where id = " + ids.text())

self.table.removeRow(selected.row()) # Removemos la fila


self.table.setCurrentIndex(QModelIndex())

# Método para crear la base de datos


def db_connect(self, filename, server): # Recibe dos parametros: nombre de la base de dat
os, y el tipo.
db = QSqlDatabase.addDatabase(server) # Creamos la base de datos
db.setDatabaseName(filename) # Le asignamos un nombre
if not db.open(): # En caso de que no se abra
QMessageBox.critical(None, "Error al abrir la base de datos.\n\n"
"Click para cancelar y salir.", QMessageBox.Cancel)
return False
return True

# Método para crear la tabla personas


def db_create(self):
query = QSqlQuery() # Instancia de Query
#Ejecutamos la sentencia para crear la tabla personas con 3 columnas
query.exec_("create table personas(id int primary key, "
"firstname varchar(20), lastname varchar(20))")
# Agregamos algunos datos de prueba
query.exec_("insert into personas values(101, 'Danny', 'Young')")
query.exec_("insert into personas values(102, 'Christine', 'Holand')")
query.exec_("insert into personas values(103, 'Lars', 'Gordon')")
query.exec_("insert into personas values(104, 'Roberto', 'Robitaille')")
query.exec_("insert into personas values(105, 'Maria', 'Papadopoulos')")

# Método para ejecutar la base de datos


def init(self, filename, server):
import os # Importamos os
if not os.path.exists(filename):
self.db_connect(filename, server) # Llamamos a "db_connect"

self.db_create() # Llamamis a "db_create"
else:
self.db_connect(filename, server)

if __name__ == '__main__':
app = QApplication(sys.argv) # Creamos una instancia de "QApplication"
ejm = PYQT_BD() # Instancia de nuestra clase "PYQT_DB"
# Llamamos al metodo "iinit"
# La base de datos se llamara 'personas' y sera 'SQLite'
ejm.init('personas', 'QSQLITE')
ejm.show() # Ejecutamos la ventana
sys.exit(app.exec_()) # Cerramos el proceso

Ahora ejecutemos el código:

Presionemos el botón "Cargar Datos" para mostrar el contenido de la base de datos:


Ingresemos algunos datos a la base de datos:

Ahora puedes probar eliminado algunos datos.

Espero que te sea de utilidad. Si tienes alguna duda, sabes que puedes dejar tu comentario.

Mi nombre es Luis y fue un placer compartir mis conocimientos con todos ustedes :D.


Cloud-Based Log Management

Instantly manage logs from two


servers, or 2,000, with Papertrail™.

Me gusta 155 Tweet

Sobre Luis Salcedo

Luis Creador de @PythonDiario Amante de la Tecnología y la Naturaleza. Testing de Software,

Salcedo Programador Python, C# . NET


  

NEXT PREVIOUS
Introducción a las Redes Neuronales: Parte #1 - Métodos Introducción a las Redes Neuronales - Parte #1:
de Aprendizaje Elementos básicos de una Red Neuronal

 5 COMENTARIOS : WRITE COMENTARIOS

fede kiczka 16 de julio de 2018, 8:21

exelente todo lo que haces gracias nos sirve de mucho

Responder

Luis Salcedo  16 de julio de 2018, 15:33

Muchas gracias por visitar el blog :D


Responder
Mauricio A 19 de julio de 2018, 4:35

Genial, todo lo que nos aporta y el conocimiento que se ve que tiene del lenguaje GRACIAS

Responder

Mariano Garrido 19 de julio de 2018, 5:43

Buenas, no se si me podrás ayudar, pero estoy utilizando Python 3.6 y Pyqt5, me pone el siguiente
error

from PyQt5.QtSql import *


ImportError: DLL load failed: No se encontró el proceso especificado.

Gracias

Responder

Anónimo 10 de noviembre de 2018, 2:12

Gracias

Responder

Introduce tu comentario...

Comentar como: Cuenta de Goo

Publicar Vista previa

Tu comentario es importante y nos motiva a seguir escribiendo...

Extraer información de teléfono con Python


Tutorial como enviar correos con el estilo de Edward Snowden en Python (Parte 2)
Tutorial como enviar correos con el estilo de Edward Snowden en Python (Parte 1)


HalloKids 5 al
14 de Octubre
Salitre Mágico

Gózate las atracciones, disfruta de Freaky


Clowns 3D, Zona de espantapájaros.

MÁS

 POST POPULARES

Ejercicios resueltos en 
python (Parte 1)
Ejercicios en python (Parte
1)

Los 5 mejores IDE para


Python

Numeros primos en python

Ejercicios en python (Parte


2)

Listas en python

Diccionarios en Python:
Propiedades, Operaciones,
Metodos y mas

Como instalar python en


linux

Obtener fecha y hora actual


en python (datetime - time)

Eliminar elementos
duplicados de una lista en
Python utilizando Set


 CATEGORIAS
Aplicaciones Gráficas

base de datos

curso python

ejercicios en python

interfaces graficas

juegos en python

Libros Python

Modulos

programacion orientada a objetos

pygame

PyQt4

soluciones de ejercicios

Tutorial Python

wxPython

 DESTACADO

Quienes Somos

Libros Python

Tutorial python desde cero --> 2.7

Ejercicios de programación python

Tutorial Python 3.5

Tutorial Tkinter completo


Mini-Curso de wxPython
Tutorial Django desde cero

 ESCRITORES ACTIVOS

DtxdF

Guimer Josue Torres Rojas

Luis Salcedo

PythonDiario

Thai Samaniego

Unknown

Powered by Blogger .

Vous aimerez peut-être aussi