Base, Firebird y ORM

Discute sobre las herramientas de la base de datos

Base, Firebird y ORM

Notapor mauricio » Lun Sep 30, 2019 7:00 pm

Hola a todos...

Como todos sabemos, Firebird a partir de LibreOffice 6.3 es al nuevo motor de base de datos de facto. Tarde o temprano tendremos que migrar todo a este motor o cualquier nuevo desarrollo "debería" usarlo de forma predeterminada.

Casi cualquier lenguaje moderno, tiene algún manejador de bases de datos de modos que no tengamos (casi) que tocar una línea de SQL. A esta herramienta se llama Object-relational mapping u ORM, y la mayoría son una maravilla. Por supuesto, en Python hay varios muy buenos, pero como nos gustan las cosas sencillas, yo uso que no requiere ninguna dependencia y que es extensible, es decir, que se puede adaptar a otras base de datos, que es la prueba de concepto que hice y ha funcionado de maravilla.

Una prueba de concepto, con un código como el siguiente:
Código: Seleccionar todo   Expandir vistaContraer vista
import uno
import easymacro as app

from peewee import *
from lobase_ext import LOBaseDatabase


path_db = '/home/mau/people.odb'
db_name = 'people'
db = LOBaseDatabase(db_name)


class BaseModel(Model):
    class Meta:
        database = db


class Person(BaseModel):
    name = CharField()
    last_name = CharField()


def main():
    if not app.exists_path(path_db):
        obj = app.new_db(path_db)
    db.connect()
    db.create_tables([Person], safe=False)

    p = Person(name='Teresa', last_name='Salgueiro')
    p.save()

    Person.insert(name='Naomi', last_name='Watts').execute()

    people = [
        {'name': 'Sofia', 'last_name': 'Loren'},
        {'name': 'Soledad', 'last_name': 'Villamil'},
        {'name': 'Irene', 'last_name': 'Azuela'},
    ]
    for p in people:
        Person.insert(**p).execute()

    return


Hemos creado tanto la tabla nueva con todos sus campos necesarios, y hemos insertado cinco nuevos registros. Como pueden ver en la imagen, ha funcionado correctamente.

image.png
image.png (36.53 KiB) Visto 211 veces


De aquí al infinito. :lol:

P.D. No intenten copiar y ejecutar este código, requiere su explicación, que documentaré más adelante.
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5934
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Base, Firebird y ORM

Notapor mauricio » Lun Sep 30, 2019 10:23 pm

Lo más interesante, es como el ORM te genera la cadena SQL de forma correcta:

Código: Seleccionar todo   Expandir vistaContraer vista
CREATE TABLE "person" ("id" INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY NOT NULL, "name" VARCHAR(255) NOT NULL, "last_name" VARCHAR(255) NOT NULL)
INSERT INTO "person" ("name", "last_name") VALUES (?, ?)
INSERT INTO "person" ("name", "last_name") VALUES (?, ?)
INSERT INTO "person" ("name", "last_name") VALUES (?, ?)
INSERT INTO "person" ("name", "last_name") VALUES (?, ?)
INSERT INTO "person" ("name", "last_name") VALUES (?, ?)
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5934
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Base, Firebird y ORM

Notapor Longi » Mar Oct 01, 2019 6:18 am

Buenas!

mauricio escribió: yo uso que no requiere ninguna dependencia y que es extensible, es decir, que se puede adaptar a otras base de datos, que es la prueba de concepto que hice y ha funcionado de maravilla..


¿Esto qué quiere decir, que se podrán generar bases de datos con distintos motores? (reivindicación que hicimos en la reunión de Valencia).

Muchas gracias y un saludo! ;)
Openoffice 4.1.7, en Windows 10
Openoffice 4.1.3, en Windows 7
Libreoffice 6.3, en Windows 10
Longi
 
Mensajes: 592
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Base, Firebird y ORM

Notapor mauricio » Mar Oct 01, 2019 2:59 pm

Claro, de hecho, la librería no tiene soporte para Base/Firebird, que es la adaptación que estoy haciendo, pero ya tiene soporte para MySQL/MariaDB, Sqlite, y mi favorita de todas las favoritas Postgres... ¿tienes alguna que necesites?

Manejar bases de datos no es trivial, hacer drivers para conectarse y manejarlas, lo es menos, pero todo es abarcable por mortales como uno. :)

Un abrazo
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5934
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Base, Firebird y ORM

Notapor Longi » Mar Oct 01, 2019 4:18 pm

Buenas!

No estaba pensando en mis necesidades, las cuales cambiarán según vaya profundizando en el aprendizaje, y por la velocidad que llevo, creo que mis necesidades variarán dentro de muuuuuuucho tiempo.... :lol: :lol: :lol:
Estaba pensando en las necesidades de la suite, ya que para entrar en el mundo empresarial de forma un poco 'asentada' creo que necesita mover una base de datos multipuesto con agilidad y fiabilidad.
Por ahora se ha apostado en Libre por Firebird (también monopuesto), y la he utilizado realmente poco, aunque parece que comentan que mejoró la estabilidad, pero necesita de complementos para ser multipuesto, con lo que no deja de ser un juguete doméstico.
Si podemos variar el motor de la base que se tiene 'de oficio' por otro, y podemos manejarlo para hacer bases desde 0, como si fuese Firebird, el avance para la suite para entrar en el mundo digamos...'serio' podría ser expectacular.
Habría que trabajar (por parte de la gente de LOO o AOO, o ambos) en la manera de mejorar la velocidad de los procesos, ya que todo parece basarse en ResultSets que hay que ir leyendo línea por línea.
Supongo que estas mejoras son de la suite y no corresponde al motor de la base de datos a la que se haya enganchado uno.
¿No sería posible trabajar algunos procesos en forma de matrices?, por ejemplo al pasar una tabla de base a calc, lo cual sería instantáneo.
Me tengo fijado que los filtros en base van como un tiro. Te filtra los resultados en una tabla de 50.000 registros en décimas de segundo, mientras que si haces una búsqueda te eternizas, por ejemplo.(¿no se podría aplicar la tecnología de los filtros para las consultas?)
Estos 'detallitos' y la exigencia de tener que hacer todo con macros (lo cual ahora no me supone un obstáculo insalvable a día de hoy), hace que no haya demasiados seguidores tanto de base como de la suite en general.
En definitiva!, yo no voy a pedir nada a los Reyes Magos como necesidad particular, pero sí sugerir a Papá Noel (Mauricio) que si se consiguiese manejar MySQL y Postgress, además de Firebird en las condiciones actuales, el espectro de acción sería enorme.
Muchas gracias por los desarrollos y un saludo! ;) :bravo:
Openoffice 4.1.7, en Windows 10
Openoffice 4.1.3, en Windows 7
Libreoffice 6.3, en Windows 10
Longi
 
Mensajes: 592
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Base, Firebird y ORM

Notapor mauricio » Mar Oct 01, 2019 4:39 pm

Para serte sincero, me interesan más las necesidades de mis amigos como tu, que del mundo empresarial, para ese mundo, un alto porcentaje ya esta cubierto, muy bien con gran cantidad de soluciones abiertas y cerradas.

Con la librería que estoy usando [1] es una maravilla, pero requiere, ademas, los drivers respectivos para cada motor de base de datos, encontrar una librería "puro" Python para que funciona en cualquier versión de LibreOffice (OpenOffice lo siento, mientras no migre a Python3 poco se puede hacer) no es tarea sencilla, pero es alcanzable.

Hacer lo que quieres: "¿No sería posible trabajar algunos procesos en forma de matrices?, por ejemplo al pasar una tabla de base a calc, lo cual sería instantáneo.", es viable y factible en este momento, de hecho, en mi versión anterior de EasyDev iba por ese camino, si me ayudas a depurarlo, podemos hacerlo en relativamente poco tiempo.

Un abrazo

[1] https://github.com/coleifer/peewee
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5934
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Base, Firebird y ORM

Notapor mauricio » Mar Oct 01, 2019 8:36 pm

He terminado de mapear los principales tipos de datos, con el siguiente código:

Código: Seleccionar todo   Expandir vistaContraer vista
import uno
import easymacro as app

from peewee import *
from peewee.lobase_ext import (LOBaseDatabase,
    BaseDateField, BaseDateTimeField, BaseBooleanField)


path_db = '/home/mau/pruebas.odb'
db_name = 'pruebas'
db = LOBaseDatabase(db_name)


class BaseModel(Model):
    class Meta:
        database = db


class Campos(BaseModel):
    id = IdentityField()
    texto = CharField()
    entero = IntegerField(default=0)
    flotante = FloatField(default=0.0)
    booleano = BaseBooleanField(default=False)
    fecha = BaseDateField(null=True)
    fechatiempo = BaseDateTimeField(default=app.now())


@app.catch_exception
def main():
    if not app.exists_path(path_db):
        obj = app.new_db(path_db)
    db.connect()
    db.create_tables([Campos])

    valores = dict(
        texto='Texto',
        entero=10,
        flotante=1000000,
        booleano=True,
        fecha=app.today(),
    )
    Campos.insert(**valores).execute()

    db.close()

    return


Se genera la tabla de forma correcta...

foro1.png
foro1.png (36.92 KiB) Visto 171 veces


noten como el ID se agrega de forma automática, y la fechatiempo al tener un valor predeterminado, también.

foro2.png


De aquí al infinito... :lol:
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5934
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Base, Firebird y ORM

Notapor mauricio » Mié Oct 02, 2019 4:18 am

Longi escribió:Si podemos variar el motor de la base que se tiene 'de oficio' por otro, y podemos manejarlo para hacer bases desde 0, como si fuese Firebird,


He cambiado el motor de base de datos por Postgres, y usando "casi" el mismo código, hemos creado la tabla con sus datos:
Código: Seleccionar todo   Expandir vistaContraer vista
db_name = 'test'
user = 'valedor'
contra = 'letmein'
db = PostgresqlDatabase(db_name, user=user, password=contra)


class BaseModel(Model):
    class Meta:
        database = db

class Campos(BaseModel):
    texto = CharField()
    entero = IntegerField(default=0)
    flotante = FloatField(default=0.0)
    booleano = BooleanField(default=False)
    fecha = DateField(null=True)
    fechatiempo = DateTimeField(default=app.now())


def add_table():
    db.connect()
    db.create_tables([Campos])

    valores = dict(
        texto='Texto',
        entero=10,
        flotante=1000000,
        booleano=True,
        fecha=app.today(),
    )
    Campos.insert(**valores).execute()
    db.close()

    return


La tabla creada:

Código: Seleccionar todo   Expandir vistaContraer vista
test=#  \d
              List of relations
Schema |     Name      |   Type   |  Owner 
--------+---------------+----------+---------
public | campos        | table    | valedor
public | campos_id_seq | sequence | valedor
(2 rows)

test=#  \d campos
                                         Table "public.campos"
   Column    |            Type             | Collation | Nullable |              Default     
         
-------------+-----------------------------+-----------+----------+---------------------------
---------
id          | integer                     |           | not null | nextval('campos_id_seq'::r
egclass)
texto       | character varying(255)      |           | not null |
entero      | integer                     |           | not null |
flotante    | real                        |           | not null |
booleano    | boolean                     |           | not null |
fecha       | date                        |           |          |
fechatiempo | timestamp without time zone |           | not null |
Indexes:
    "campos_pkey" PRIMARY KEY, btree (id)



Con los datos correctos.

Código: Seleccionar todo   Expandir vistaContraer vista
test=# select * from campos;
id | texto | entero | flotante | booleano |   fecha    |        fechatiempo       
----+-------+--------+----------+----------+------------+---------------------------
  1 | Texto |     10 |    1e+06 | t        | 2019-10-01 | 2019-10-01 22:12:22.71047
(1 row)


El driver funciona bien sin dependencias en Linux, faltaría probarlo en Windows. :super:
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5934
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Base, Firebird y ORM

Notapor Longi » Dom Oct 06, 2019 9:50 am

Supongo que eres consciente de mi falta de nivel.
Hasta ahora solo me he manejado con basic en 'modo IKEA', es decir, teniendo piezas y poniéndolas de todas formas posibles hasta que encajan...., pero con la extensión tuya no sé como moverme o qué hacer para probar las cosas que has puesto en este hilo, y realmente quisiera poder hacerlo.
Ya me contarás.

Un saludo! ;)
Openoffice 4.1.7, en Windows 10
Openoffice 4.1.3, en Windows 7
Libreoffice 6.3, en Windows 10
Longi
 
Mensajes: 592
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Base, Firebird y ORM

Notapor mauricio » Dom Oct 06, 2019 5:47 pm

Soy totalmente consciente de que eres un "pillo" al tratar de engañarnos con tu nivel :) pero no funcionará :)

Vamos paso a paso, esto todavía no lo integro a la extensión, pero lo estará, también estoy empezando a grabar unos videos que aclaran muchas cosas.

Mi ambiciosa meta, es que casi cualquier, independientemente de su nivel, pueda automatizar sus tareas, desde las más sencillas hasta las más complejas, pero reitero, a mi me gusta avanzar, un paso a la vez.

Un abrazo
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5934
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Base, Firebird y ORM

Notapor mauricio » Jue Oct 10, 2019 1:05 am

¿Cual sería un proyecto, sencillo, pero funcional, es decir, que se pueda usar día a día, para mostrarles la versatilidad de estas herramientas?. Yo pensaba desde una libreta de contactos, un administrador de contraseñas, hasta la lista de gastos. ¿que opinan?
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5934
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Base, Firebird y ORM

Notapor mriosv » Jue Oct 10, 2019 2:55 pm

A ver que te parece,

un fichero para guardar macros, que tenga una macro para instalar la macro del registro seleccionado.
pk_id, fecha_creacion, fecha_revision, fecha_instalacion, autor, lenguage_prog, nombre, macro, ayuda, notas.
probablemente incluso sería fantástico que pudiera contener extensiones y que fueran instalables desde el mimo, aunque en este caso serían necesarios mas campos.

que también podría ser interesante con pequeños cambios o en el mismo, para guardar expresiones regulares / comodines.
pk_id, fecha_creacion, fecha_revision, fecha_copiado, autor, tipo_expresion, nombre, expresion, ayuda, notas.

así sería muy fácil compartirlos y para ir coleccionando de forma ordenada y organizada.
Puedes usar "Subir adjunto" en Respuesta rápida - Editor Completo - Pestaña Subir adjunto
Apache OpenOffice 4, LibreOffice 5 (Win10x64)
mriosv
 
Mensajes: 2186
Registrado: Sab Dic 27, 2008 1:12 am
Ubicación: Galiza (España)

Re: Base, Firebird y ORM

Notapor mauricio » Jue Oct 10, 2019 3:40 pm

¿Un administrador de snippets?, me gusta +1
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5934
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Base, Firebird y ORM

Notapor Longi » Jue Oct 10, 2019 11:48 pm

¡Caray!

Unos piensan y otros miramos los toros desde la barrera!

Eso tiene una pinta estupenda!
Ya nos contareis!

Un saludo! ;)
Openoffice 4.1.7, en Windows 10
Openoffice 4.1.3, en Windows 7
Libreoffice 6.3, en Windows 10
Longi
 
Mensajes: 592
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Base, Firebird y ORM

Notapor RMG » Vie Oct 11, 2019 10:27 am

Yo apoyo esta propuesta. jejejej...
OpenOffice 4.1.6 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
RMG
 
Mensajes: 3546
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España


Volver a Base

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados