Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Conectar Firebird Python 3.5 (https://www.clubdelphi.com/foros/showthread.php?t=89850)

agtisa 17-02-2016 22:31:26

Conectar Firebird Python 3.5
 
Hola:
Agradecería información y código como conectar Python 3.5 con Firebird 2.x.

No estoy seguro de cual es el conector, creo es 'fdb', pero no consigo instalarlo.

En Python 2.7 si que consigo instalar el conector 'fdb', pero no consigo acerta con el código y no hay forma de cnectar el código que utilizo es este:
********************
import fdb
con = fdb.connect(dsn='localhost:d:2016.fdb',user='sysdba',password='masterkey')
**********************

Dinde: localhost:d:2016.fdb

son servidor, ruta y nombre bd, respectivamente.

Agradecido de antemano.

Saludos.

Casimiro Notevi 17-02-2016 23:16:46

¿Pero tienes controlador para firebird?

agtisa 17-02-2016 23:25:02

hola casimiro, gracias por contestar.

tengo el controlador fdb' en pytho, 2.7 va pero no acierto con el código para conectar por mas que lo intento, en Python 3.5 no va.

a ver si pudieras indicarme un controloador adecuado y el codigo de conexión en su caso.

te reitero mi agradecimiento.

Casimiro Notevi 18-02-2016 00:10:03

Mira esta documentación en línea, ahí lo explican.

Delphius 18-02-2016 00:47:02

No conozco Python pero creo de toda la vida en Windows, Linux y/o en Mac se debe definir el path con las barras \ o / según el caso.
Y en tu código no se ve ninguna después de D: :rolleyes:

Y el user por defecto en Firebird es con mayúsculas: SYSDBA.

Por cierto, si te arroja un error, mínimo deberías decirnos cual es el error.

Saludos,

Casimiro Notevi 18-02-2016 01:00:25

Cita:

Empezado por Delphius (Mensaje 502219)
No conozco Python pero creo de toda la vida en Windows, Linux y/o en Mac se debe definir el path con las barras \ o / según el caso.
Y en tu código no se ve ninguna después de D: :rolleyes:

Si está en el directorio raiz, no es necesario.

Cita:

Empezado por Delphius (Mensaje 502219)
Y el user por defecto en Firebird es con mayúsculas: SYSDBA.

También lo acepta en minúsculas.

Cita:

Empezado por Delphius (Mensaje 502219)
Por cierto, si te arroja un error, mínimo deberías decirnos cual es el error.
Saludos,

Eso sí ^\||/

Delphius 18-02-2016 01:47:49

Cita:

Empezado por Casimiro Notevi (Mensaje 502220)
Si está en el directorio raiz, no es necesario.

Pos, que cosas raras esas.

Cita:

Empezado por Casimiro Notevi (Mensaje 502220)
También lo acepta en minúsculas.

Cierto. Se me había pasado ese detalle que para Firebird le da lo mismo SYSDBA que sysdba en el nombre del usuario. Estoy tan acostumbrado a escribirlo en mayúscula que olvidé esto. A mi parecer no debería de ser asi. Yo tengo la idea de que no debiera de ser lo mismo escribir pepito que PePito.

Saludos,

roman 18-02-2016 02:39:27

Cita:

Empezado por Casimiro Notevi (Mensaje 502220)
Si está en el directorio raiz, no es necesario.

:confused:

No entiendo por qué dices que no es necesario. Por otra parte, en la documentación no veo referencias a que haya distinciones entre unix y windows por lo que me parece que la línea tendría que ser así:

Código:

con = fdb.connect(dsn='localhost:d:/2016.fdb',user='sysdba',password='masterkey')
LineComment Saludos

Delphius 18-02-2016 05:04:26

Cita:

Empezado por roman (Mensaje 502223)
:confused:

No entiendo por qué dices que no es necesario. Por otra parte, en la documentación no veo referencias a que haya distinciones entre unix y windows por lo que me parece que la línea tendría que ser así:

Código:

con = fdb.connect(dsn='localhost:d:/2016.fdb',user='sysdba',password='masterkey')
LineComment Saludos

Precisamente como en los ejemplos como el que hay en el enlace de Casimiro vi que en el path siempre estaban las barras es que yo comenté que les hace falta las barras... y tiré por las dudas que sean dependientes del SO.
Pero como Python es un desconocido para mi, prefiero darle el benficio a las palabras de Casi. Puede que el sepa algo que a nosotros se nos escape y que efectivamente si es como dice que si está en la raiz no hace falta la barra.

Ya nos aclarará el seguro.

Saludos,

fjcg02 18-02-2016 08:42:32

Hola,

a mi me funciona perfectamente haciendo esto.

WinXP, Python 2.7.9

Código SQL [-]
import fdb
# CONEXION FIREBIRD
cnxn = fdb.connect(dsn='localhost:C:\dir1\INFORMES.FDB',user='sysdba',password='masterkey' )
cursor = cnxn.cursor()

cursor.execute('SELECT * from TABLA')
rows = cursor.fetchall()

for row in rows :
        print row[0]

print "registros: ", len(rows)

cursor.close

Saludos

agtisa 18-02-2016 09:20:29

Muchas gracias Casimiro por tu ayuda en información, si lo soluciono lo comento.

Casimiro Notevi 18-02-2016 09:59:01

Cita:

Empezado por roman (Mensaje 502223)
No entiendo por qué dices que no es necesario. Por otra parte, en la documentación no veo referencias a que haya distinciones entre unix y windows por lo que me parece que la línea tendría que ser así:
Código:

con = fdb.connect(dsn='localhost:d:/2016.fdb',user='sysdba',password='masterkey')
LineComment Saludos

Cita:

Empezado por Delphius (Mensaje 502228)
Precisamente como en los ejemplos como el que hay en el enlace de Casimiro vi que en el path siempre estaban las barras es que yo comenté que les hace falta las barras... y tiré por las dudas que sean dependientes del SO.
Pero como Python es un desconocido para mi, prefiero darle el benficio a las palabras de Casi. Puede que el sepa algo que a nosotros se nos escape y que efectivamente si es como dice que si está en la raiz no hace falta la barra.
Ya nos aclarará el seguro.Saludos,

Obviamente, es conveniente poner la barra para que no haya equívoco, pero si está directamente en el directorio raiz, no debería ser necesario, aunque yo también la pongo por asegurarme.
Y funcionar, tiene que funcionar, ¿lo habéis probado?

agtisa 18-02-2016 10:23:58

Gracias delphius, efectivamente llevas razón con la barra, en este caso es inclinada a la derecha.

El usuario (sysdba), es indiferente mayúscula o minúscula.

El código correcto es el que comenta y publica Roman:

con = fdb.connect(dsn='localhost:d:/2016.fdb',user='sysdba',password='masterkey')

Gracias a todos y a quien pudiera ayudar, solucioné el tema con Python 2.7.11, me queda en Python 3.5 que parece ser el controlador fdb' no es compatible, si alguien tiene idea... por favor.

Gracias a:

Casimiro, Roman, Delphius y fjcg02.

roman 18-02-2016 17:14:04

Cita:

Empezado por Casimiro Notevi (Mensaje 502238)
pero si está directamente en el directorio raiz, no debería ser necesario, aunque yo también la pongo por asegurarme.

Sigo sin entender porqué dices esto. Si es por algo particular de los conectores en python entonces ciertamente lo desconozco. Pero si es por analogía a las rutas en windows, recuerdo que D: no es necesariamente equivalente a D:\ ya que la letra de unidad seguida de dos puntos se refiere siempre al directorio actual en esa unidad, que no necesariamente es la raíz.

LineComment Saludos

Casimiro Notevi 18-02-2016 17:50:53

Cita:

Empezado por roman (Mensaje 502258)
Sigo sin entender porqué dices esto. Si es por algo particular de los conectores en python entonces ciertamente lo desconozco. Pero si es por analogía a las rutas en windows, recuerdo que D: no es necesariamente equivalente a D:\ ya que la letra de unidad seguida de dos puntos se refiere siempre al directorio actual en esa unidad, que no necesariamente es la raíz.
LineComment Saludos

Quería decir que no deber ser totalmente necesario (sintácticamente) poner la barra si la base de datos está en la raiz del disco. Imagina un disco que se usa únicamente para almacenar la base de datos, siempre que conectara a D:basedatos.fdb la encontraría sin problemas, aunque no ponga la barra.
Aunque, por supuesto, es conveniente ponerla para asegurar que siempre toma el camino correcto a la raiz, y evitar posibles problemas.

agtisa 18-02-2016 23:10:51

Efectivamente Casimiro llevas razón en parte, pero te diré que observo que el formato y sentido de ruta windows o dos, no es lo mismo que el que exige Pytho 2.7 11 en este caso y se debe al controlador.
Lo mismo otra versión del controlador exige otro formato de ruta, me inclino a que si.

Muchas gracias por tu inestimable ayuda.

Delphius 18-02-2016 23:34:03

Para saber si es cosa del controlador que no es soportado en 3.5 deberías contactar al grupo de soporte de Firebird.

A mi la última duda que me queda, ya de curioso nomás, es si el sentido de las barras en la ruta depende del SO o si es indistinto. Python que yo sepa es multiplataforma por lo que puede correrse en Windows y Linux. Y al menos en Windows lo más de esperarse es que si uno intenta abrir el directorio bla/bla/bla se dará con sorpresas.

Esto lo pregunto porque fjcg02 escribió el path con \, lo que sugiere que se está corriendo en Windows, mientras que todos los ejemplos consultado en la documentación del enlace que puso Casimiro hacen pensar en Linux (o Mac).

Saludos,

fjcg02 19-02-2016 08:44:43

Respondiendo a Delphius,

en este pc que estoy utilizando con WXP, TAMBIEN FUNCIONA con / en vez de \, lo acabo de confirmar.

En un equipo con linux, fijo que es la barra /

Saludos

Código SQL [-]
import fdb
# CONEXION FIREBIRD
cnxn = fdb.connect(dsn='localhost:C:/dir1/INFORMES.FDB',user='sysdba',password='masterkey' )
cursor = cnxn.cursor()
# acceder a la SQL del archivo

cursor.execute('SELECT * from FESTIVOS')
rows = cursor.fetchall()

#print row
for row in rows :
        print row[0]

print "registros: ", len(rows)

cursor.close

agtisa 19-02-2016 15:54:50

Casimiro, ubiqué la bd en directorio raíz D: a conciencia y si no se pone / echa error sintaxis.

Utilizo Python 2.7.11 en windows 10

agtisa 19-02-2016 15:56:34

Muchas gracias fjcg02.


La franja horaria es GMT +2. Ahora son las 04:25:19.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi