elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Consulta MySQL desde una función
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Consulta MySQL desde una función  (Leído 8,193 veces)
DeMoNcRaZy


Desconectado Desconectado

Mensajes: 420


$~*|_


Ver Perfil
Consulta MySQL desde una función
« en: 20 Diciembre 2021, 01:08 am »

Buenas, tengo un problema duda respecto a insertar datos en la base de datos mediante consultas mysql.

Tengo el archivo main.py

Código
  1. from tkinter import *
  2. from tkinter import ttk
  3. from conexion import *
  4.  
  5. ####### FUNCIONES #######
  6.  
  7. def click():
  8.    ttk.Label(mainframe, text="Haz echo CLICK").grid(column=40, row=70, sticky=W)
  9.    ttk.Button(mainframe, text="BOTON 2", command=click2).grid(column=40, row=90, sticky=W)
  10.  
  11. def click2():
  12.    ttk.Label(mainframe, text="POR FIN!!").grid(column=40, row=110, sticky=W)
  13.    ttk.Button(mainframe, text="BOTON 2").grid(column=40, row=130, sticky=W)
  14.  
  15. def crearCliente():
  16.    crearCliente1 = "INSERT INTO test(id,name,email) VALUES ('5','prueba','prueba')"
  17.  
  18.    ttk.Label(mainframe, text="Haz creado un cliente").grid(column=40, row=150, sticky=W)
  19.  
  20.  
  21. ####### VENTANA Tkinter #######
  22.  
  23. root = Tk()
  24. root.title("Mostrar datos")
  25. root.geometry("400x400")
  26.  
  27. mainframe = ttk.Frame(root, padding="3 3 12 12")
  28. mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
  29. root.columnconfigure(0, weight=1)
  30. root.rowconfigure(0, weight=1)
  31.  
  32.  
  33. ttk.Label(mainframe, text=results).grid(column=3, row=2, sticky=W)
  34. ttk.Label(mainframe, text="Probando Label").grid(column=30, row=20, sticky=W)
  35.  
  36. ttk.Button(mainframe, text="BOTON", command=crearCliente).grid(column=40, row=40, sticky=W)
  37.  
  38.  
  39.  
  40. root.mainloop()

Y el archivo conexión.py:

Código
  1. import pymysql
  2.  
  3. # Abre conexion con la base de datos
  4. db = pymysql.connect(host='localhost',
  5.                             user='root',
  6.                             password='root',
  7.                             database='test',
  8.                             charset='utf8mb4',
  9.                             cursorclass=pymysql.cursors.DictCursor)
  10. ##################################################
  11. cursor = db.cursor()
  12.  
  13. # Seleccionador base de datos
  14. sql = "SELECT name FROM test WHERE id = 2"
  15.  
  16. # Ejecutar comando
  17. cursor.execute(sql)
  18.  
  19. # Mostrar
  20. results = cursor.fetchall()
  21.  
  22. # Desconexion
  23. db.close()

Tengo esto, y funciona bien hasta el sentido de que tengo importado el archivo de conexión en el main (archivo principal) lo cual tengo una variable llamada "results" que se muestra perfectamente en el main, y eso que Estrellas declarada en el archivo conexión.

Y ahora estoy intentado crear una consulta a la base de datos en la función CrearCliente de añadir un nuevo dato y no se me añade. No me da ningún error ni nada pero no se crea los datos en la base de datos. ¿que estoy haciendo mal?

Cualquier información adicional lo agradeceria.

Saludos.


En línea

Esta página web no está disponible - Google Chrome
Drakaris

Desconectado Desconectado

Mensajes: 286


Todo lo que puedas imaginar, lo puedes crear.


Ver Perfil
Re: Consulta MySQL desde una función
« Respuesta #1 en: 20 Diciembre 2021, 20:53 pm »

Buenos dias.
¿Porque falla y como solucionarlo?
Código
  1. # Seleccionador base de datos
  2. def crearCliente():
  3.    crearCliente1 = "INSERT INTO test(id,name,email) VALUES ('5','prueba','prueba')"
  4.  

El problema esta en la sentencia SQL.
La sintaxis es correcta pero los tipos de datos asociados de la columna no cuadran.

El id es una columna PRIMARY KEY, que identifica ese registro en concreto. Este normalmente es auto incremental que por cada insert que tu hagas este se incrementa.
El tipo de dato para un id autoincrementado es INT.

Como es INT (integer=entero), es un numero, por la cual no puedes añadir en el VALUES un '5', sino un 5.

El '5' no es igual a 5.
'5' con comillas simples ( ' ) o comillas dobles ( " ) significa que es un VARCHAR(), texto
5 (sin comillas) es un numero.


Propuesta de mejora

Configuraria en el gestor de bases de datos que la columna id fuera autoincrementado.

Yo no se como creas las tablas...si lo haces por interfaz grafica o SQL. Pero en SQL sería....
Código
  1. CREATE TABLE test1 (
  2.    id INT NOT NULL AUTO_INCREMENT,
  3.    name VARCHAR(20) NOT NULL,
  4.    email VARCHAR(100) NOT NULL,
  5.    CONSTRAINT test_PK PRIMARY KEY (id)
  6. );
  7.  

Si es AUTOINCREMENT no hace falta que insertes el 5 cuando hacer el INSERT.

Código
  1. INSERT INTO test(name,email) VALUES ('prueba','prueba');
  2.  
Recomendacion de seguridad
Yo no recomiendo como programador de esta app, que este ataque a la base de datos con el usuario root.
El usuario ROOT es el que tiene más privilegios, por lo cual tiene también acceso a las otras DB, este no se suele usar para desarollo.
Crea otro usuario especifico y este que unicamente tenga acceso a la DB especifica test.
Código
  1. CREATE USER 'test'@'localhost' IDENTIFIED BY 'root';
  2. GRANT ALL PRIVILEGES ON test.* TO 'test'@'localhost';
  3.  
La ultima sentencia le doy todos los permisos al usuario test que tenga acceso a la DB test.


En línea

Lo increible, no es lo que ves, sino como es
DeMoNcRaZy


Desconectado Desconectado

Mensajes: 420


$~*|_


Ver Perfil
Re: Consulta MySQL desde una función
« Respuesta #2 en: 21 Diciembre 2021, 18:25 pm »

Buenos dias.
¿Porque falla y como solucionarlo?
Código
  1. # Seleccionador base de datos
  2. def crearCliente():
  3.    crearCliente1 = "INSERT INTO test(id,name,email) VALUES ('5','prueba','prueba')"
  4.  

El problema esta en la sentencia SQL.
La sintaxis es correcta pero los tipos de datos asociados de la columna no cuadran.

El id es una columna PRIMARY KEY, que identifica ese registro en concreto. Este normalmente es auto incremental que por cada insert que tu hagas este se incrementa.
El tipo de dato para un id autoincrementado es INT.

Como es INT (integer=entero), es un numero, por la cual no puedes añadir en el VALUES un '5', sino un 5.

El '5' no es igual a 5.
'5' con comillas simples ( ' ) o comillas dobles ( " ) significa que es un VARCHAR(), texto
5 (sin comillas) es un numero.


Propuesta de mejora

Configuraria en el gestor de bases de datos que la columna id fuera autoincrementado.

Yo no se como creas las tablas...si lo haces por interfaz grafica o SQL. Pero en SQL sería....
Código
  1. CREATE TABLE test1 (
  2.    id INT NOT NULL AUTO_INCREMENT,
  3.    name VARCHAR(20) NOT NULL,
  4.    email VARCHAR(100) NOT NULL,
  5.    CONSTRAINT test_PK PRIMARY KEY (id)
  6. );
  7.  

Si es AUTOINCREMENT no hace falta que insertes el 5 cuando hacer el INSERT.

Código
  1. INSERT INTO test(name,email) VALUES ('prueba','prueba');
  2.  
Recomendacion de seguridad
Yo no recomiendo como programador de esta app, que este ataque a la base de datos con el usuario root.
El usuario ROOT es el que tiene más privilegios, por lo cual tiene también acceso a las otras DB, este no se suele usar para desarollo.
Crea otro usuario especifico y este que unicamente tenga acceso a la DB especifica test.
Código
  1. CREATE USER 'test'@'localhost' IDENTIFIED BY 'root';
  2. GRANT ALL PRIVILEGES ON test.* TO 'test'@'localhost';
  3.  
La ultima sentencia le doy todos los permisos al usuario test que tenga acceso a la DB test.



Muchas gracias poe su respuesta se lo agradezco por dicha explicación.
Y tomaré nota respecto a lo de seguridad.

Pero respecto a lo crear una tabla no lo crea, he creado unas tabla nuevas con el SQL que me proporcionó igual.

La aplicación se ejecuta bien no da ningún fallo, pero no hace su función de insertar los datos.

Lo tengo así:

Código
  1. from tkinter import *
  2. from tkinter import ttk
  3. from conexion import *
  4.  
  5. ####### FUNCIONES #######
  6.  
  7. def crearCliente():
  8. crearCliente = "INSERT INTO test1(name,email) VALUES ('prueba','prueba')"  
  9. ttk.Label(mainframe, text="Haz creado un cliente").grid(column=40, row=150, sticky=W)
  10.  
  11.  
  12. ####### VENTANA Tkinter #######
  13.  
  14. root = Tk()
  15. root.title("Mostrar datos")
  16. root.geometry("400x400")
  17.  
  18. mainframe = ttk.Frame(root, padding="3 3 12 12")
  19. mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
  20. root.columnconfigure(0, weight=1)
  21. root.rowconfigure(0, weight=1)
  22.  
  23. ##### Textos y Botones #####
  24.  
  25. ttk.Label(mainframe, text=results).grid(column=3, row=2, sticky=W)
  26.  
  27. ttk.Button(mainframe, text="BOTON", command=crearCliente).grid(column=40, row=40, sticky=W)
  28.  
  29.  
  30.  
  31. root.mainloop()

No da ningún fallo lo único que no introduce los datos en la base de datos. Ya que es una base de datos externa de "freemysqlhosting.net" por si tuviera algo que ver.

Cualquier información adicional lo agradezco.

Saludos.
En línea

Esta página web no está disponible - Google Chrome
Drakaris

Desconectado Desconectado

Mensajes: 286


Todo lo que puedas imaginar, lo puedes crear.


Ver Perfil
Re: Consulta MySQL desde una función
« Respuesta #3 en: 22 Diciembre 2021, 20:09 pm »

Bunos dias!

Me alegro que hayas podido mejorar en crear la tabla con PK y id autoincrementado.
Por lo que veo, esta todo bién. Me gustaría ver el archivo conexion.py pues puede que este fallando algo.

Ten en cuenta que si estas trabajando con un Web Hosting, este en su panel te dará la direccion al que tienes que ir. Puedo intuir que deberia estar así actualmente tu conexion.py
Código
  1. import pymysql
  2.  
  3. # Abre conexion con la base de datos
  4. db = pymysql.connect(host='freemysqlhosting.net',
  5.                             user='root',
  6.                             password='root',
  7.                             database='test',
  8.                             charset='utf8mb4',
  9.                             cursorclass=pymysql.cursors.DictCursor)
  10. # [...]
  11.  

Esto es un ejemplo, para saberlo tendrías que mirar en tu CPanel de tu proveedor de Hosting web. Un ejemplo sería:

https://imgur.com/gallery/itKoNsD

Ten en cuenta: que es este caso el host es 260mb.net pero para conexion con DB es sql113.260mb.net. Puede que el tuyo también sea algo así.

Espero haberte ayudado! Buenas fiestas y que te lo pases bien! :laugh: ;D
En línea

Lo increible, no es lo que ves, sino como es
DeMoNcRaZy


Desconectado Desconectado

Mensajes: 420


$~*|_


Ver Perfil
Re: Consulta MySQL desde una función
« Respuesta #4 en: 23 Diciembre 2021, 09:33 am »

Buenas,

Nuevamente gracias por su intervención y perdona que aun no lio haya resuelto, aun que me parece raro de echo lo veo bien todo y tal como usted me dice, si la conexión esta bien tal como me indicas, ya que también tengo una consulta mostrando una tabla de la base de datos en la aplicación así que la conexión esta bien.

Le dejo los archivo totalmente como lo tengo originalmente, contraseña db y tal datos reales:

conexión.py:
Código
  1. import pymysql
  2.  
  3. # Abre conexion con la base de datos
  4. db = pymysql.connect(host='sql11.freemysqlhosting.net',
  5.                             user='sql11459959',
  6.                             password='kcF1ibf3Me',
  7.                             database='sql11459959',
  8.                             charset='utf8mb4',
  9.                             cursorclass=pymysql.cursors.DictCursor)
  10. ##################################################
  11. cursor = db.cursor()
  12.  
  13. # Seleccionador base de datos
  14. sql = "SELECT name FROM test WHERE id = 2"
  15.  
  16. # Ejecutar comando
  17. cursor.execute(sql)
  18.  
  19. # Mostrar
  20. results = cursor.fetchall()
  21.  
  22. # Desconexion
  23. db.close()


Aquí el main.py:
Código
  1. from tkinter import *
  2. from tkinter import ttk
  3. from conexion import *
  4.  
  5. ####### FUNCIONES #######
  6.  
  7. def crearCliente():
  8. crearCliente = "INSERT INTO test1(name,email) VALUES ('prueba','prueba')"  
  9. ttk.Label(mainframe, text="Haz creado un cliente").grid(column=40, row=150, sticky=W)
  10.  
  11.  
  12. ####### VENTANA Tkinter #######
  13.  
  14. root = Tk()
  15. root.title("Mostrar datos")
  16. root.geometry("400x400")
  17.  
  18. mainframe = ttk.Frame(root, padding="3 3 12 12")
  19. mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
  20. root.columnconfigure(0, weight=1)
  21. root.rowconfigure(0, weight=1)
  22.  
  23. ##### Textos y Botones #####
  24.  
  25. ttk.Label(mainframe, text=results).grid(column=3, row=2, sticky=W)
  26.  
  27. ttk.Button(mainframe, text="BOTON", command=crearCliente).grid(column=40, row=40, sticky=W)
  28.  
  29.  
  30.  
  31. root.mainloop()

Eso es como lo tengo originalmente y corre bien la aplicación de echo me muestra un dato de la base de datos que es el nombre, que yo lo solicito en la conexión.py u con la variable "results" lo muestro en el main.py

Si quiere puede usted copiar y pegar esos dos códigos y debería funcionarle igual que a mí. Los datos de la base de datos son los reales para la conexión. (No importa que exponga lo datos reales, es un base de datos gratis y la estoy usando para pruebas nada más)

Cualquier información adicional lo agradezco.

Muchas gracias por su tiempo y dedicación.

Saludos cordiales.
En línea

Esta página web no está disponible - Google Chrome
Drakaris

Desconectado Desconectado

Mensajes: 286


Todo lo que puedas imaginar, lo puedes crear.


Ver Perfil
Re: Consulta MySQL desde una función
« Respuesta #5 en: 23 Diciembre 2021, 12:37 pm »

Buenos dias!

RECOMENDACION: Elimina los datos de conexion de DB, ya que han sido probados, no te interesa que cualquiera pueda entrar. Auque no sea relevante para ti, y solo es de prueba. Además esta entrando como root y algúien podría eliminar la DB del hosting y liartela....

Con tu permiso, he entrado en tu DB y he comprobado que funciona correctamente. (solo he insertado unos datos en la tabla test1 y lo he vaciado sus registros)

 No habia caido en que al hacer la funcion crearCliente()
Código
  1. def crearCliente():
  2. crearCliente = "INSERT INTO test1(name,email) VALUES ('prueba','prueba')"  
  3. ttk.Label(mainframe, text="Haz creado un cliente").grid(column=40, row=150, sticky=W)
  4.  

No lo estas ejecutando en ninguna DB . Pues indicas el SQL pero no haces nada con el. Primero deberias de crear la conexion (como lo hicistes en conexion.py) y después ejecutar la variable crearCliente. Quedaria algo así

Código
  1. def crearCliente():
  2.   try:
  3.        db = pymysql.connect(....)
  4.        cursor = db.cursor()
  5. crearCliente = "INSERT INTO test1(name,email) VALUES ('prueba','prueba')"
  6.        cursor.execute(crearCliente)
  7. ttk.Label(mainframe, text="Haz creado un cliente").grid(column=40, row=150, sticky=W)
  8.   except:
  9.        ttk.Label(mainframe, text="Error en la DB").grid(column=40, row=150, sticky=W)
  10.   finally:
  11.      try:
  12.          cursor.close()
  13.          db.close()
  14.      finally:
  15.         None
  16.  

Ademas pondría un try/catch por si hay algun error en el SQL/conexion,etc....

Además le añado un finally para asegurar que siempre se me cierra la conexion, de un error o no.

Espero haberte ayudado y  felices fiestas  ;D
« Última modificación: 23 Diciembre 2021, 12:41 pm por Drakaris » En línea

Lo increible, no es lo que ves, sino como es
DeMoNcRaZy


Desconectado Desconectado

Mensajes: 420


$~*|_


Ver Perfil
Re: Consulta MySQL desde una función
« Respuesta #6 en: 23 Diciembre 2021, 19:19 pm »

Buenos dias!

RECOMENDACION: Elimina los datos de conexion de DB, ya que han sido probados, no te interesa que cualquiera pueda entrar. Auque no sea relevante para ti, y solo es de prueba. Además esta entrando como root y algúien podría eliminar la DB del hosting y liartela....

Con tu permiso, he entrado en tu DB y he comprobado que funciona correctamente. (solo he insertado unos datos en la tabla test1 y lo he vaciado sus registros)

 No habia caido en que al hacer la funcion crearCliente()
Código
  1. def crearCliente():
  2. crearCliente = "INSERT INTO test1(name,email) VALUES ('prueba','prueba')"  
  3. ttk.Label(mainframe, text="Haz creado un cliente").grid(column=40, row=150, sticky=W)
  4.  

No lo estas ejecutando en ninguna DB . Pues indicas el SQL pero no haces nada con el. Primero deberias de crear la conexion (como lo hicistes en conexion.py) y después ejecutar la variable crearCliente. Quedaria algo así

Código
  1. def crearCliente():
  2.   try:
  3.        db = pymysql.connect(....)
  4.        cursor = db.cursor()
  5. crearCliente = "INSERT INTO test1(name,email) VALUES ('prueba','prueba')"
  6.        cursor.execute(crearCliente)
  7. ttk.Label(mainframe, text="Haz creado un cliente").grid(column=40, row=150, sticky=W)
  8.   except:
  9.        ttk.Label(mainframe, text="Error en la DB").grid(column=40, row=150, sticky=W)
  10.   finally:
  11.      try:
  12.          cursor.close()
  13.          db.close()
  14.      finally:
  15.         None
  16.  

Ademas pondría un try/catch por si hay algun error en el SQL/conexion,etc....

Además le añado un finally para asegurar que siempre se me cierra la conexion, de un error o no.

Espero haberte ayudado y  felices fiestas  ;D



Nuevamente, mil gracias por todo su tiempo y esfuerzo.
Ahora ya si vamos un paso más, pero falta algún detalle que no cuadra, se ejecuta la aplicación perfectamente pero al pulsar el botón me manda al "expcet" "ERROR en la db" y no se inserta los datos en la base de datos.

Y en la consola del sublime text me salta este error cuando pulso el botón.
Me señala prueba.close()

Código
  1. finally:
  2. try:
  3. prueba.close()
  4. db.close()
  5. finally:
  6. None

Y el error que pone en consola es esto:

Código:
Exception in Tkinter callback
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/tkinter/__init__.py", line 1921, in __call__
    return self.func(*args)
  File "/Users/tomas/Downloads/Pruebas/main.py", line 27, in crearCliente
    prueba.close()
UnboundLocalError: local variable 'prueba' referenced before assignment
[Finished in 10.2s]


Y este es el código total que tengo ahora mismo del main.py
Código
  1. from tkinter import *
  2. from tkinter import ttk
  3.  
  4. ####### FUNCIONES #######
  5.  
  6. city = (9, 'Kiev', 2887000)
  7.  
  8. def crearCliente():
  9. try:
  10. db = pymysql.connect(host='sql11.freemysqlhosting.net',
  11. user='sql11459959',
  12. password='kcF1ibf3Me',
  13. database='sql11459959',
  14. charset='utf8mb4',
  15. cursorclass=pymysql.cursors.DictCursor)
  16.  
  17. prueba = db.cursor()
  18. crearCliente = "INSERT INTO test1(name,email) VALUES ('prueba', 'prueba')"
  19. prueba.execute(crearCliente)
  20. ttk.Label(mainframe, text="Haz creado un cliente").grid(column=40, row=150, sticky=W)
  21.  
  22. except:
  23. ttk.Label(mainframe, text="Error en la DB").grid(column=40, row=150, sticky=W)
  24.  
  25. finally:
  26. try:
  27. prueba.close()
  28. db.close()
  29. finally:
  30. None
  31.  
  32.  
  33. ####### VENTANA Tkinter #######
  34.  
  35. root = Tk()
  36. root.title("Mostrar datos")
  37. root.geometry("400x400")
  38.  
  39. mainframe = ttk.Frame(root, padding="3 3 12 12")
  40. mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
  41. root.columnconfigure(0, weight=1)
  42. root.rowconfigure(0, weight=1)
  43.  
  44. ##### Textos y Botones #####
  45.  
  46. ttk.Label(mainframe, text="nada").grid(column=3, row=2, sticky=W)
  47.  
  48. ttk.Button(mainframe, text="BOTON", command=crearCliente).grid(column=40, row=40, sticky=W)
  49.  
  50.  
  51.  
  52. root.mainloop()


¿Cuál puede ser el problema ahora? Ahora que empieza a cuadrar las cosas, parece que hay una sola pieza que falta supongo, he estado mirando y tal pero me lanza al error de .close()

Muchas gracias por sus intervenciones y perdona todo este contratiempo, se lo agradezco mucho.

Y por supuesto ¡FELIZ NAVIDAD IGUALMENTE!
En línea

Esta página web no está disponible - Google Chrome
Drakaris

Desconectado Desconectado

Mensajes: 286


Todo lo que puedas imaginar, lo puedes crear.


Ver Perfil
Re: Consulta MySQL desde una función
« Respuesta #7 en: 23 Diciembre 2021, 20:49 pm »

Buenas!
Disculpa las molestias cuando hice el finally que dentro hay otro try, debe de haber un except no otro finally, por la cual se debe quedar así
Código
  1.   finally:
  2.      try:
  3.          cursor.close()
  4.          db.close()
  5.      except:
  6.         None
  7.  
Pues queremos que si hay conexion se cierre y sino no hace nada.
Además da error porque requiere del modulo pymysql, cuyo modulo no has importado en ningun sitio
Código
  1. import pymysql
  2.  

Si no lo tienes instalado, lo puedes instalar haceindo
Citar
pip3 install pymysql

Buenas fiestas, y espero que te haya ayudado y te salga...Suerte  :D
En línea

Lo increible, no es lo que ves, sino como es
.xAk.


Desconectado Desconectado

Mensajes: 397


F0r3v3R NeWbI3


Ver Perfil WWW
Re: Consulta MySQL desde una función
« Respuesta #8 en: 23 Diciembre 2021, 22:04 pm »

¿Aún está la contraseña ahí escrita? voy leyendo por ahí arriba. Esto es problema de permisos seguramente, como habéis comentado. Actuar sobre la base de datos debe ser desde un origen determinado. Sigo leyendo por ahí arriba ... ya puedes ir cambiando la contraseña no sea que alguno de por ahí la haya visto

No es que te hagan algo malo o bueno, es que te la quitan, ya sea de pago o gratis
« Última modificación: 23 Diciembre 2021, 22:38 pm por .xAk. » En línea


DeMoNcRaZy


Desconectado Desconectado

Mensajes: 420


$~*|_


Ver Perfil
Re: Consulta MySQL desde una función
« Respuesta #9 en: 25 Diciembre 2021, 19:35 pm »

Buenas, espero que las fiestas bien a tod@s!!

Gracias a tod@s por la intervención en el tema, me ha resultado de gran ayuda a como resolver algunas cosas y aprender como estructurar todo mejor.

Ahora tendría una pequeña duda más a resolver, y es que por ejemplo por casa clase que cree ejecutando un comando de mostrar o insertar datos de la base de datos tengo que crear una conexión a la base de datos, ejemplo yo tengo estas clases y en cada una he tenido que crear una conexión a la base de datos si no no me funcionaba y me daba error, ¿hay alguna manera de solo con una conexión usarla para todos los archivos?

Código
  1. import pymysql
  2.  
  3. con = pymysql.connect(host='sql11.freemysqlhosting.net',
  4.                             user='sql11459959',
  5.                             password='kcF1ibf3Me',
  6.                             database='sql11459959',
  7.                             charset='utf8mb4',
  8.                             cursorclass=pymysql.cursors.DictCursor)
  9.  
  10. def crearCliente():
  11.    try:
  12.        cur = con.cursor()
  13.        crearCliente = "INSERT INTO test1(name,email) VALUES ('prueba', 'prueba')"
  14.        cur.execute(crearCliente)
  15.        con.commit()
  16.  
  17.        #con.close()
  18.  
  19.        print("Se guardo correctamente")
  20.    except:
  21.        print ("Error")
  22.  
  23.    finally:
  24.        try:
  25.            con.close()
  26.        except:
  27.            None
  28.  
  29.  
  30. def mostrarCliente():
  31.    try:
  32.        con1 = pymysql.connect(host='sql11.freemysqlhosting.net',
  33.                             user='sql11459959',
  34.                             password='kcF1ibf3Me',
  35.                             database='sql11459959',
  36.                             charset='utf8mb4',
  37.                             cursorclass=pymysql.cursors.DictCursor)
  38.  
  39.  
  40.        cur1 = con1.cursor()
  41.        mostrarCliente = "SELECT * FROM test1 WHERE id = 19"
  42.        cur1.execute(mostrarCliente)
  43.        rows = cur1.fetchall()
  44.  
  45.        #con.close()
  46.  
  47.        print("El cliente es:", rows)
  48.    except:
  49.        print("Error2")
  50.  
  51.    finally:
  52.        try:
  53.            con1.close()
  54.        except:
  55.            None
  56.  
  57.  
  58.  
  59.  
  60. crearCliente()
  61. mostrarCliente()
  62. print ("Se ha guardado")

Por cada clase tengo una conexión nueva a la base de datos si no me da falla, así me funciona todo bien de momento.

¿Hay alguna manera que con una conexión que haga en el mismo archivo o un archivo diferente ejemplo conexión.py lo importe al archivo principal y use esa conexión para todos los archivos?

¿O hay que hacer siempre una conexión nueva a la base de datos por cada clase y comando que ejecute?


Muchas gracias por todo, y nuevamente ¡¡FELICES FIESTAS!!
En línea

Esta página web no está disponible - Google Chrome
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines