Título: Consulta MySQL desde una función Publicado por: DeMoNcRaZy 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
Y el archivo conexión.py: Código
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. Título: Re: Consulta MySQL desde una función Publicado por: Drakaris en 20 Diciembre 2021, 20:53 pm Buenos dias.
¿Porque falla y como solucionarlo? Código
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
Si es AUTOINCREMENT no hace falta que insertes el 5 cuando hacer el INSERT. Código 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 La ultima sentencia le doy todos los permisos al usuario test que tenga acceso a la DB test. Título: Re: Consulta MySQL desde una función Publicado por: DeMoNcRaZy en 21 Diciembre 2021, 18:25 pm Buenos dias. ¿Porque falla y como solucionarlo? Código
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
Si es AUTOINCREMENT no hace falta que insertes el 5 cuando hacer el INSERT. Código 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 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
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. Título: Re: Consulta MySQL desde una función Publicado por: Drakaris 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
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) 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 Título: Re: Consulta MySQL desde una función Publicado por: DeMoNcRaZy 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
Aquí el main.py: Código
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. Título: Re: Consulta MySQL desde una función Publicado por: Drakaris 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
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
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 Título: Re: Consulta MySQL desde una función Publicado por: DeMoNcRaZy 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
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
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
Y el error que pone en consola es esto: Código: Exception in Tkinter callback Y este es el código total que tengo ahora mismo del main.py Código
¿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! Título: Re: Consulta MySQL desde una función Publicado por: Drakaris 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 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
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 Título: Re: Consulta MySQL desde una función Publicado por: .xAk. 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 Título: Re: Consulta MySQL desde una función Publicado por: DeMoNcRaZy 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
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!! Título: Re: Consulta MySQL desde una función Publicado por: Drakaris en 9 Enero 2022, 18:24 pm Buenas!! Feliz año!
Y si llamas a mostrarCliente() en el finally de la funcion crearCliente(). Y en el mostrarCliente() reutilizas la variable cur. Código
No he probado el codigo... Epero haberte ayudado :)) |