sql >> Base de Datos >  >> RDS >> Mysql

Python Conéctese a la base de datos MySQL con el conector MySQL y el ejemplo de PyMySQL

Cuando desee conectarse a la base de datos MySQL en código Python, puede usar tanto el mysql-connector-python Controlador MySQL y PyMySQL . El conector mysql-python El controlador MySQL es un controlador integrado del servidor MySQL y el PyMySQL es una biblioteca de terceros.

Todas las dos bibliotecas MySQL python proporcionan clases para que obtenga la conexión de la base de datos MySQL, ejecute insertar, eliminar, actualizar, seleccionar el comando SQL. También admiten la gestión de transacciones. Este artículo le mostrará un ejemplo de cómo usar mysql-connector-python y PyMySQL para operar en la tabla de la base de datos MySQL.

1. Cómo usar mysql-connector-python para operar la base de datos MySQL.

1.1 Instalar la biblioteca mysql-connector-python.

  1. El conector-mysql-python La biblioteca se puede instalar cuando instala la base de datos MySQL.
  2. Para que pueda ejecutar el comando pip show mysql-connector-python para comprobar si se ha instalado o no.
    $ pip show mysql-connector-pythonADVERTENCIA:Paquete(s) no encontrado(s):mysql-connector-python
  3. Si mysql-connector-python biblioteca no está instalada, puede ejecutar el comando pip install mysql-connector-python para instalarlo.
    $ pip install mysql-connector-pythonRecopilación de mysql-connector-python Descarga de mysql_connector_python-8.0.25-py2.py3-none-any.whl (319 kB) |█████████ ███████████████████████| 319 kB 219 kB/s Recopilando protobuf>=3.0.0 Descargando protobuf-3.17.0-cp37-cp37m-macosx_10_9_x86_64.whl (959 kB) |████████████████ ██████████████| 959 kB 727 kB/s Requisito ya satisfecho:six>=1.9 en /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (de protobuf>=3.0.0->mysql-connector -python) (1.15.0) Instalación de paquetes recopilados:protobuf, mysql-connector-python Instalado correctamente mysql-connector-python-8.0.25 protobuf-3.17.0
  4. Ahora, cuando ejecute el comando pip show mysql-connector-python De nuevo, puede obtener su información de instalación. /connector-python/en/index.htmlAutor:Oracle y/o sus afiliadosCorreo electrónico del autor:DESCONOCIDOLicencia:GNU GPLv2 (con excepción de licencia FOSS)Ubicación:/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7 /site-packagesRequires:protobufRequired-by:

1.2 Use mysql-connector-python Pasos para conectarse a la base de datos MySQL.

  1. Importar el mysql.connector clase.
    importar mysql.conector
  2. Invoque mysql.connector.connect() método para conectarse al servidor de la base de datos MySQL. ', use_unicode=True):conn =mysql.connector.connect(usuario=usuario, contraseña=contraseña, host=host, puerto=puerto, base de datos=base de datos, use_unicode=use_unicode) return conn

1.3 Ejecutar instrucción DDL para crear una tabla.

  1. Obtenga el cursor de la base de datos MySQL.
    cursor =conn.cursor()
  2. Ejecutar sentencia DDL. Si desea ejecutar varias declaraciones DDL a la vez, debe separar cada declaración DDL con un punto y coma, y ​​debe agregar multi=True
    parámetro para el objeto del cursor execute() de lo contrario arrojará el error mysql.connector.errors.InterfaceError:use multi=True cuando se ejecuten varias declaraciones .

    def execute_ddl(conn):cursor =conn.cursor() # El siguiente DDL primero eliminará la tabla si existe, luego creará la tabla. ddl_sql=''' DROP TABLE cuenta_usuario; CREATE TABLE `dev2qa_example`.`user_account` ( `id` INT NOT NULL AUTO_INCREMENT, `user_name` VARCHAR(45) NULL, `password` VARCHAR(45) NULL, `email` VARCHAR(45) NULL, PRIMARY KEY (`id `)); ''' # Debido a que el DDL anterior contiene 2 declaraciones (drop, create), necesita agregar el parámetro multi=True para evitar el error mysql.connector.errors.InterfaceError:use multi=True cuando ejecute varias declaraciones. cursor.execute(ddl_sql, multi=True) cursor.close() conn.close() print(ddl_sql + ' ejecutar correctamente.')

1.4 Ejecutar instrucción DML (Insertar, Actualizar, Eliminar).

  1. Obtenga el objeto de cursor de conexión de la base de datos MySQL.
  2. Ejecute la instrucción SQL de inserción, actualización y eliminación con el objeto de cursor execute() method.
    def execute_dml(conn):cursor =conn.cursor() dml_insert =''' INSERTAR EN `dev2qa_example`.`user_account` VALORES (null, %s, %s, %s); ''' cursor.execute(dml_insert, ('tom', 'tom12345678', '[email protected]')) conn.commit() cursor.close() conn.close()
  3. Si desea insertar varias filas en la tabla MySQL, puede ejecutar executemany() del objeto del cursor. method.
    def execute_dml_insert_many(conn):cursor =conn.cursor() dml_insert =''' INSERTAR EN `dev2qa_example`.`user_account` VALORES (null, %s, %s, %s); ''' tupla_fila =(('richard', 'richard', '[email protected]'), ('trump', 'trump', '[email protected]'),('doctor', 'doctor' , '[email protected]')) cursor.executemany(dml_insert, row_tuple) conn.commit() cursor.close() conn.close()

1.5 Ejecutar instrucción SQL de selección DML.

  1. Ejecutar execute() del objeto del cursor método para ejecutar la instrucción SQL select.
    def execute_dml_select(conn):cursor =conn.cursor() dml_select ='SELECT * FROM dev2qa_example.user_account;' cursor.execute(dml_select) # imprime el encabezado de la fila. para col en cursor.description:print(col[0], end='\t') print('\n------------------------ -----') # imprime los datos de cada fila. para la fila en el cursor:print(fila) print(fila[1] + '--->' + fila[2]) cursor.close() conn.close()

2. Cómo usar PtMySQL para operar la base de datos MySQL.

2.1 Instalar PyMySQL.

  1. Antes de poder usar PyMySQL, primero debe instalarlo. Puede usar pip para instalar como se muestra a continuación.
    $ pip3 install PyMySQL
  2. Puede ejecutar pip3 show comando para verificar la instalación de PyMySQL.
    $ pip3 show PyMySQL

2.2 Use PyMySQL para conectar y operar la base de datos MySQL.

A continuación se muestran los pasos que utiliza la biblioteca PyMySQL en el código de Python.

  1. Importar la conexión de PyMSQL , cursores class.
    from pymysql import connect, cursores
  2. Llamar conectar método para obtener el objeto de conexión de la base de datos MySQL.
    conn =connect(host=host, user=user, password=password, db=db, charset=charset, cursorclass=cursorclass)
  3. Obtenga el objeto del cursor de la base de datos mediante la función cursor() del objeto de conexión.
    conn.cursor() como cursor:
  4. Ejecutar la sentencia SQL usando el objeto cursor.
    cursor.execute(sql)
  5. Si la instrucción sql es una instrucción select, llame al método fetchall() o fetchone() del objeto del cursor para obtener el resultado de la ejecución de sql. Tenga en cuenta que después de invocar fetchall(), el cursor se moverá a la última fila del resultado, por lo que si vuelve a llamar al método fetchall(), no se devolverá ninguna fila.
    row =cursor.fetchall()orrow =cursor .buscar()
  6. Si la declaración sql es una declaración de inserción, actualización, eliminación, entonces llame a la función commit() del objeto de conexión para confirmar los cambios en la base de datos MySQL para que surtan efecto.
    conn.commit()
  7. No olvide cerrar el objeto de conexión de la base de datos MySQL al final para liberar los recursos de la base de datos.
    si conn no es Ninguno:conn.close() conn =Ninguno

2.3 Ejemplo de operación de base de datos MySQL con PyMySQL.

  1. En este ejemplo, el nombre de la base de datos MySQL es dev2qa_example , el nombre de la tabla es user_account . La tabla tiene cuatro columnas que son id , nombre_de_usuario , contraseña, y correo electrónico . La columna id se incrementa automáticamente.
  2. El código fuente de python contiene métodos para insertar, actualizar, eliminar y seleccionar datos de cuentas de usuario como se muestra a continuación.
    desde pymysql import connect, cursorsglobal_host='127.0.0.1'global_user='jerry'global_password='jerry'global_db='dev2qa_example'global_charset='utf8'global_cursorclass=cursors.DictCursor# get mysql connection object.def open_mysql_connection(host='127.0.0.1', user='jerry', password='jerry', db='dev2qa_example', charset='utf8', cursorclass=cursors.DictCursor):conn =connect(host=host, user=user, password=password, db=db, charset=charset, cursorclass=cursorclass) return conn # cerrar conexión mysql. def close_mysql_connection(conn):si conn no es Ninguno:conn.close() conn =Ninguno# ejecutar insert, update o delete sql command.def execute_insert_update_delete_sql(sql, host, user, password, db, charset, cursorclass):execute_row_count =0 conn =Ninguno print('sql =' + sql) intente:si string_is_not_empty(sql):conn =open_mysql_connection(host, usuario, contraseña, db, charset, cursorclass) con conn.cursor() como cursor:execute_row_count =cursor. ejecutar (sql) excepto Excepción como ex:imprimir (ex) finalmente:si conn no es Ninguno:conn.commit () close_mysql_connection (conn) return execute_row_count # ejecuta el comando select sql. def ejecutar_seleccionar_sql(sql, host, usuario, contraseña, base de datos, conjunto de caracteres, clase de cursor):ret =list() conn =Ninguno print('sql =' + sql) intente:si string_is_not_empty(sql):conn =open_mysql_connection(host, usuario , contraseña, base de datos, juego de caracteres, clase de cursor) con conn.cursor() como cursor:row_count =cursor.execute(sql) print('select return fila count =' + str(row_count)) fila =cursor.fetchall() print( fila) ret.append(fila) excepto Excepción como ex:print(ex) finalmente:si conn no es Ninguno:close_mysql_connection(conn) return ret # inserte la cuenta de usuario en la tabla de la base de datos dev2qa_example.user_account. def insertar_cuenta_de_usuario(nombre_de_usuario, contraseña, correo electrónico):print('**********Begin insert_cuenta_de_usuario.**********') if cadena_no_está_vacía(nombre_de_usuario) and cadena_no_está_vacía(contraseña) and cadena_no_está_vacía (correo electrónico):# primero verifique si la cuenta de usuario existe o no. sql ="seleccione el recuento (id) como recuento de dev2qa_example.user_account donde lower(user_name) ='"+user_name.lower().strip()+"'" row_list =execute_select_sql(sql, global_host, global_user, global_password, global_db, global_charset, global_cursorclass) account_exist =False for row in row_list:for column in row:exist_count_number =column.get('count') if exist_count_number> 0:account_exist =True if not account_exist:print('User ' + user_name + ' not existe en la base de datos. Inserte la cuenta de usuario en la tabla de la base de datos.') sql ="insert into user_account(user_name, password, email) valores('"+user_name+"','"+password+"','"+email+"') " insert_row_count =ejecutar_insertar_actualizar_eliminar_sql(sql, global_host, global_user, global_password, global_db, global_charset, global_cursorclass) print('Insertar' + str(insertar_contador_de_filas) + 'fila de datos correctamente.') else:print('La cuenta de usuario existe, no se puede insertar.') else:print('nombre_de_usuario, contraseña, correo electrónico no pueden estar vacíos.') print('**********Fin de insert_user_account.** ********') # actualizar los datos de la cuenta de usuario. def actualizar_cuenta_de_usuario(nombre_de_usuario, contraseña, correo electrónico):print('**********Begin update_user_account.**********') if string_is_not_empty(user_name):sql ="update dev2qa_example. user_account set contraseña ='" + contraseña + "', email ='" + email + "' where lower(user_name) ='" + user_name.lower() + "'" update_row_count =execute_insert_update_delete_sql(sql, global_host, global_user, global_password , global_db, global_charset, global_cursorclass) if update_row_count ==0:print('La cuenta de usuario no existe, insértela ahora.') insert_user_account(nombre_de_usuario, contraseña, correo electrónico) else:print('Actualizar ' + str(update_row_count) + ' datos de fila correctamente.') else:print('user_name no puede estar vacío.') print('**********Fin de update_user_account.**********') # eliminar usuario datos de la cuenta de la tabla de la base de datos. def borrar_cuenta_usuario(nombre_usuario):print('**********Begin delete_user_account.**********') if string_is_not_empty(user_name):sql ="eliminar de dev2qa_example.user_account where lower (user_name) ='"+user_name.lower()+"'" delete_row_count =execute_insert_update_delete_sql(sql, global_host, global_user, global_password, global_db, global_charset, global_cursorclass) print('Delete ' + str(delete_row_count) + ' datos de fila correctamente. ') print('**********End delete_user_account.**********') # ejecutar el comando select sql para obtener los datos de la cuenta de usuario por nombre_de_usuario. def get_user_account_by_user_name(user_name):print('**********Begin get_user_account_by_user_name.**********') sql ="select * from dev2qa_example.user_account where lower(user_name) =' "+nombre_de_usuario.inferior().strip()+"'" lista_de_filas =ejecutar_seleccionar_sql(sql, host_global, usuario_global, contraseña_global, db_global, juego_de_caracteres_global, clase_cursor_global) print('**********Fin obtener_cuenta_de_usuario_por_nombre_de_usuario.* *********')# comprueba si la cadena está vacía o no.def string_is_not_empty(str):si str es None:devuelve False elif len(str.strip()) ==0:return False else :return Trueif __name__ =='__main__':# primero eliminar la cuenta de usuario jerry. delete_user_account('jerry') # luego inserte una cuenta de usuario jerry en la base de datos. insert_user_account('jerry', 'jerry', '[email protected]') # muestra los datos de la cuenta de usuario para verificar la acción de inserción. get_user_account_by_user_name('jerry') # actualiza la información de la cuenta del usuario. update_user_account('jerry', 'jerry888', '[email protected]') # verifique la información actualizada de la cuenta de usuario nuevamente. get_user_account_by_user_name('jerry')
  3. A continuación se muestra el resultado de la ejecución del código anterior.
    **********Begin delete_user_account.***********sql =delete from dev2qa_example.user_account where lower(user_name) ='jerry'Eliminar 1 fila de datos con éxito.***********Terminar delete_user_account.********************Empezar insert_user_account.***** *****sql =seleccione el conteo (id) como conteo de dev2qa_example.user_account donde lower(user_name) ='jerry'select return row count =1[{'count':0}]El usuario jerry no existe en la base de datos. Inserte la cuenta de usuario en la base de datos table.sql =insert into user_account(user_name, password, email) valores('jerry','jerry','[email protected]')Inserte 1 fila de datos correctamente.****** ****Terminar insert_user_account.********************Empezar get_user_account_by_user_name.***********sql =select * from dev2qa_example.user_account donde inferior (nombre_de_usuario) ='jerry'select return fila count =1[{'id':42, 'user_name':'jerry', 'password':'jerry', 'email':'[email protected]'}] **********Terminar get_user_account_by_user_name.********************Iniciar update_user_account.**********sql =actualizar dev2qa_example .user_account set password ='jerry888', email ='[email protected]' where lower(user_name) ='jerry'Actualizar 1 fila de datos correctamente.**********Finalizar update_user_account.**** *************** Comience get_user_account_by_user_name.***********sql =select * from dev2qa_example.user_account where lower(user_name) ='jerry'select return fila count =1[{'id':42, 'nombre_de_usuario':'jerry', 'contraseña':'jerry888', 'correo electrónico ':'[email protected]'}]**********Terminar get_user_account_by_user_name.**********

Referencias

  1. Cómo usar MySql en Mac