navbar_vertical_CRUD/ ├── app.py ├── nexus.db └── templates/ ├── base.html ├── index.html ├── explorar.html ├── contacto.html └── campus/ ← esta carpeta debe existir aquí ├── list.html └── form.html Adminer acceso http://10.76.243.137:5001/ System: SQLite 3 Username: Password: p4ssw0rd Database: /db/pyfleet.db pip install -r requirements.txt python app.py # → http://127.0.0.1:5000 gunicorn -w 2 -b 0.0.0.0:5000 app:app Ejecutar con Python en segundo plano nohup python app.py > flask.log 2>&1 & Comprobar que esta activo ps aux | grep python Para detenerlo pkill -f "Python app.py" Gunicorn en segundo plano. gunicorn -w 4 -b 0.0.0.0:5000 app:app > gunicorn.log 2>&1 & nohup gunicorn -w 4 -b 127.0.0.1:5000 app:app > gunicorn.log 2>&1 & Parar ps aux | grep gunicorn (averiguar proceso) pkill -f gunicorn. (nombre proceso) kill 12345. (Numero proceso) PRODUCCION LINUX GUNICORN pip install gunicorn gunicorn app:app gunicorn -w 2 -b 0.0.0.0:5000 app:app gunicorn --bind 0.0.0.0:5000 app:app gunicorn -w 4 -b 127.0.0.1:8000 app:app gunicorn --workers 4 --bind 0.0.0.0:8000 app:app gunicorn --workers 4 --bind 0.0.0.0:8000 --timeout 120 app:app PRODUCCION WINDOWS WAITRESS pip install waitress waitress-serve --host=0.0.0.0 --port=8000 app:app para Gunicorn ps aux | grep gunicorn averigua el proceso que lo usa kill 1337144 la primera de la lista pkill -f "gunicorn.*app:app lo elimina de una sola vez --------------------------------------------------------------- TABLAS CREATE TABLE "vehiculos" ( "id" INTEGER, "m_oficial" TEXT, "m_reservada" TEXT, "m_propia" TEXT, "VIN" TEXT, "poliza" TEXT, "viat" TEXT, "legajo" TEXT, "marca" TEXT, "modelo" TEXT, "tipo" TEXT, "denominacion" TEXT, "color" REAL, "combustible" TEXT, "plazas" TEXT, "lanzadestellos" INTEGER, "situacion" TEXT, "poblacion" TEXT, "unidad" TEXT, "grupo" TEXT, "int_operacion" TEXT, "int_grupo" TEXT, "int_juzgado" TEXT, "int_procedimiento" INTEGER, "f_destino_situacion" INTEGER, "f_alta" TEXT, "f_baja" INTEGER, "km" TEXT, "km_1" TEXT, "itv_ultima" INTEGER, "itv" INTEGER, "observaciones" TEXT, "historial" TEXT, "notas" TEXT, pdf TEXT, PRIMARY KEY("id" AUTOINCREMENT) ) CREATE TABLE documentos ( id INTEGER PRIMARY KEY AUTOINCREMENT, vehiculo_id INTEGER NOT NULL REFERENCES vehiculos(id) ON DELETE CASCADE, nombre TEXT, filename TEXT NOT NULL, fecha DATETIME DEFAULT (datetime('now','localtime')) ) CREATE TABLE "historial" ( "id" INTEGER, "vehiculo_id" INTEGER, "fecha" TEXT, "matricula" TEXT, "situacion" TEXT, "poblacion" TEXT, "unidad" TEXT, "grupo" TEXT, "observaciones" TEXT, PRIMARY KEY("id" AUTOINCREMENT), FOREIGN KEY("vehiculo_id") REFERENCES "vehiculos"("id") ) CREATE TABLE mensajes ( id INTEGER PRIMARY KEY AUTOINCREMENT, texto TEXT NOT NULL, autor TEXT, fecha DATETIME DEFAULT (datetime('now','localtime')) ) ----------------------------------------- Cambiar nombre de columna ALTER TABLE nombre_tabla RENAME COLUMN nombre_actual TO nombre_nuevo; Eliminar columna (hay que hacerlo de una en una (SQLite no permite varias a la vez) ALTER TABLE usuarios DROP COLUMN nombre; Cambiar None por Null table vehiculos UPDATE vehiculos SET m_oficial = NULLIF(m_oficial, 'None'), m_civil = NULLIF(m_civil, 'None'), m_propia = NULLIF(m_propia, 'None'), VIN = NULLIF(VIN, 'None'), poliza = NULLIF(poliza, 'None'), viat = NULLIF(viat, 'None'), legajo = NULLIF(legajo, 'None'), marca = NULLIF(marca, 'None'), modelo = NULLIF(modelo, 'None'), tipo = NULLIF(tipo, 'None'), denominacion = NULLIF(denominacion, 'None'), cilindrada = NULLIF(cilindrada, 'None'), potencia = NULLIF(potencia, 'None'), combustible = NULLIF(combustible, 'None'), neumaticos = NULLIF(neumaticos, 'None'), plazas = NULLIF(plazas, 'None'), situacion = NULLIF(situacion, 'None'), poblacion = NULLIF(poblacion, 'None'), unidad = NULLIF(unidad, 'None'), grupo = NULLIF(grupo, 'None'), int_operacion = NULLIF(int_operacion, 'None'), int_grupo = NULLIF(int_grupo, 'None'), int_juzgado = NULLIF(int_juzgado, 'None'), f_alta = NULLIF(f_alta, 'None'), observaciones = NULLIF(observaciones, 'None'), historial = NULLIF(historial, 'None'), notas = NULLIF(notas, 'None'); UPDATE vehiculos SET m_oficial = REPLACE(m_oficial, 'None', ''), m_civil = REPLACE(m_civil, 'None', ''), m_propia = REPLACE(m_propia, 'None', ''), VIN = REPLACE(VIN, 'None', ''), poliza = REPLACE(poliza, 'None', ''), viat = REPLACE(viat, 'None', ''), legajo = REPLACE(legajo, 'None', ''), marca = REPLACE(marca, 'None', ''), modelo = REPLACE(modelo, 'None', ''), tipo = REPLACE(tipo, 'None', ''), denominacion = REPLACE(denominacion, 'None', ''), cilindrada = REPLACE(cilindrada, 'None', ''), potencia = REPLACE(potencia, 'None', ''), combustible = REPLACE(combustible, 'None', ''), neumaticos = REPLACE(neumaticos, 'None', ''), plazas = REPLACE(plazas, 'None', ''), situacion = REPLACE(situacion, 'None', ''), poblacion = REPLACE(poblacion, 'None', ''), unidad = REPLACE(unidad, 'None', ''), grupo = REPLACE(grupo, 'None', ''), int_operacion = REPLACE(int_operacion, 'None', ''), int_grupo = REPLACE(int_grupo, 'None', ''), int_juzgado = REPLACE(int_juzgado, 'None', ''), f_alta = REPLACE(f_alta, 'None', ''), observaciones = REPLACE(observaciones, 'None', ''), historial = REPLACE(historial, 'None', ''), notas = REPLACE(notas, 'None', ''); ---------------- CREATE TABLE categorias ( id INTEGER PRIMARY KEY AUTOINCREMENT, tipo TEXT NOT NULL UNIQUE ) CREATE TABLE "historial" ( "id" INTEGER, "matricula" TEXT, "unidad" TEXT, "fecha" TEXT, "observaciones" TEXT, PRIMARY KEY("id" AUTOINCREMENT) ) CREATE TABLE "unidades" ( "unidad" TEXT ) Actualización vial UPDATE vehiculos SET viat = substr( notas, instr(lower(notas), 'viat '), 24 ) WHERE instr(lower(notas), 'viat ') > 0; ---------------------------------------- CONSULTAR TIPOS DE VEHICULO SELECT DISTINCT tipo FROM vehiculo ORDER BY tipo; Actualizar campo matrícula UPDATE clientes SET codigo = 'ABC' || codigo; Si solo quieres hacerlo en los registros que todavía no empiezan por ABC: UPDATE clientes SET codigo = 'ABC' || codigo WHERE codigo NOT LIKE 'ABC%'; Eliminar todos los guiones de un campo SQLite dispone de la función REPLACE(). UPDATE clientes SET codigo = REPLACE(codigo, '-', ''); También puedes combinar ambas operaciones Si quieres quitar los guiones y luego añadir ABC: UPDATE clientes SET codigo = 'ABC' || REPLACE(codigo, '-', ''); --------------------------------------- CAMPOS BUSQUEDA VEHICULOS m_oficial m_civil ppm VIN Marca Modelo Tipo Población Departamento --------------------------------------- Consulta cambiar nombre a un campo ALTER TABLE nombre_tabla RENAME COLUMN nombre_antiguo TO nombre_nuevo; Consulta sql unir campos observaciones e historial en nuevo campo notas. ALTER TABLE vehiculos ADD COLUMN notas TEXT; UPDATE vehiculos SET notas = TRIM(COALESCE(observaciones, '') || ' ' || COALESCE(historial, '')); Consulta eliminar un campo (ejemplo img) ALTER TABLE nombre_tabla DROP COLUMN nombre_campo; ALTER TABLE vehiculos DROP COLUMN img; (No se pueden eliminar dos o mas columnas a la vez) Consulta eliminar guiones o puntos UPDATE nombre_tabla SET nombre_campo = REPLACE(nombre_campo, '.', ''); UPDATE nombre_tabla SET nombre_campo = REPLACE(nombre_campo, '-', ''); UPDATE vehiculos SET m_oficial = REPLACE(departamento, '.', ''); UPDATE vehiculos SET departamento = REPLACE(departamento, '.', ''); De este modo solo se modificarán las filas cuyo campo contenga al menos un punto. UPDATE vehiculos SET matricula = REPLACE(matricula, '.', '') WHERE matricula LIKE '%.%'; Actualización multiple UPDATE vehiculos SET matricula = REPLACE(matricula, '.', ''), bastidor = REPLACE(bastidor, '.', ''), motor = REPLACE(motor, '.', ''); También puedes aplicar operaciones diferentes a cada campo: UPDATE vehiculos SET matricula = REPLACE(matricula, '.', ''), notas = TRIM(COALESCE(observaciones, '') || ' ' || COALESCE(historial, '')), f_alta = '2025-01-01'; Y si solo quieres actualizar determinadas filas, añade una cláusula WHERE: UPDATE vehiculos SET matricula = REPLACE(matricula, '.', ''), bastidor = REPLACE(bastidor, '.', '') WHERE id = 10; ACTUALIZACION CON CRITERIOS Comprobar antes: SELECT * FROM vehiculos WHERE departamento = 'Seg Ciudadana' AND poblacion = 'VELEZ'; Ejecutar update: UPDATE vehiculos SET departamento = 'SC' WHERE departamento = 'Seg Ciudadana' AND poblacion = 'VELEZ'; CREATE TABLE "historial" ( "id" INTEGER, "vehiculo_id" INTEGER, "fecha" TEXT, "matricula" TEXT, "situacion" TEXT, "poblacion" TEXT, "unidad" TEXT, "grupo" TEXT, "observaciones" TEXT, PRIMARY KEY("id" AUTOINCREMENT), FOREIGN KEY("vehiculo_id") REFERENCES "vehiculos"("id") ) PRAGMA foreign_keys = OFF; BEGIN TRANSACTION; CREATE TABLE revisiones_nueva ( id INTEGER PRIMARY KEY, vehiculo_id INTEGER NOT NULL, fecha DATE, observaciones TEXT, FOREIGN KEY (vehiculo_id) REFERENCES vehiculos(id) ON UPDATE CASCADE ON DELETE CASCADE ); INSERT INTO revisiones_nueva (id, vehiculo_id, fecha, observaciones) SELECT id, vehiculo_id, fecha, observaciones FROM revisiones; DROP TABLE revisiones; ALTER TABLE revisiones_nueva RENAME TO revisiones; COMMIT; PRAGMA foreign_keys = ON; ————————————— UPDATE historial SET vehiculo_id = ( SELECT id FROM vehiculos WHERE vehiculos.m_oficial = historial.matricula ); ——————————————— SOBRE LA TABLA HISTÓRIAL UPDATE historial SET poblacion_id = ‘1', unidad = TRIM(REPLACE(unidad, 'MALAGA', '')) WHERE unidad LIKE '%MALAGA%'; UPDATE unidades SET unidad = TRIM(REPLACE(unidad, 'MALAGA-', '')) WHERE unidad LIKE '%MALAGA%';