Cómo conectarse a la base de datos MySQL usando Python
1. Establecer una conexión con la base de datos
2. Ejecutar la instrucción SQL y recibir el valor de retorno
3.
1. La base de datos MySQL requiere el módulo MySQLdb, pero MySQLdb, la biblioteca de terceros utilizada por Python para vincularse a MySQL, no es compatible con Python3.x
Nota especial: cuando experimenté en mi computadora , mi Python era la versión 2.7.2. Puede ejecutarlo directamente después de instalar la versión correspondiente de MySQLdb y conectarse con éxito a la base de datos, por lo que si todos tienen tanto éxito como yo, no es necesario que lea lo siguiente, simplemente omita ¡Y mire el punto 2 sobre cómo ejecutar la declaración SQL! Si se produce una excepción después de la instalación, puede consultar las siguientes soluciones.
La clave para la conexión es instalar el módulo MySQLdb y descargar la versión correspondiente a Python:
Después de descargar e instalar, detectará automáticamente la ruta de instalación de Python en la computadora y completará automáticamente en la ruta de descompresión del módulo (la mía es: D:\ProgramFiles\ActivePython 2.6.6.17\Lib\site-packages\).
Pero no se puede utilizar una vez completada la descompresión y es necesario modificar algunos archivos del módulo MySQLdb:
① En el directorio MySQLdb (el mío es: D:\ProgramFiles. \ActivePython 2.6 .6.17\Lib\site-packages\MySQLdb) Busque __init__.py:
Comente las líneas 34 y 35 de setsimport ImmutableSet, clase DBAPISet(ImmutableSet):, y agregue la clase DBAPISet(frozenset) al final:
# de conjuntos import ImmutableSet
# clase DBAPISet(ImmutableSet):
clase DBAPISet(frozenset):
②.Abrir convertidores.py:
Comente el from sets import BaseSet, Set en la línea 37 y devuelva Set([i for i in s.split(',') ifi]) en la línea 45 Cambie a set; también cambie el Set en la línea 129: Set2Str a set (no modifique Set2Str. La modificación se completa aquí
2. Establezca una conexión a la base de datos
importar MySQLdb<). /p>
conn=MySQLdb.connect(host="localhost", usuario="root", passwd="sa", db="mytable")
Los parámetros más utilizados incluyen
host: el nombre de host del servidor de base de datos conectado, el valor predeterminado es localhost.
usuario: nombre de inicio de sesión de la base de datos. El valor predeterminado es el usuario actual.
contraseña: secreto de inicio de sesión de la base de datos. El valor predeterminado es vacío.
db: el nombre de la base de datos. para ser utilizado. Sin valor predeterminado.
puerto: puerto TCP utilizado por el servicio MySQL. El valor predeterminado es 3306.
La conexión conn tiene dos métodos importantes: confirmar para enviar nuevas adiciones. y modificaciones, y revertir para cancelar nuevas Agregar o modificar
3 Ejecutar operaciones de base de datos
n=cursor.execute(sql, param)
Nosotros. Necesitamos usar el objeto de conexión para obtener un objeto de cursor, luego, a continuación, usaremos los métodos proporcionados por el cursor para trabajar.
Estos métodos incluyen dos categorías principales: 1. Ejecutar comandos, 2. Recibir valores de retorno.
el cursor se usa para ejecutar comandos. Método:
callproc(self, procname, args): se usa para ejecutar el procedimiento almacenado. Los parámetros recibidos son el nombre del procedimiento almacenado y la lista de parámetros. y el valor de retorno es el número de filas afectadas
ejecutar (self, query, args): Ejecuta una única instrucción SQL. Los parámetros recibidos son la instrucción SQL en sí y la lista de parámetros utilizada. el número de filas afectadas
ejecutar muchos (self, query, args): ejecuta una única instrucción SQL, pero ejecuta repetidamente los parámetros en la lista de parámetros y el valor de retorno es el número de filas afectadas
nextset(self): pasa al siguiente conjunto de resultados
Usa el cursor Métodos para recibir valores de retorno:
fetchall(self): recibe todas las filas de resultados devueltos.
p>fetchmany(self, size=None): recibe filas de resultados de devolución de tamaño. Si el valor de tamaño es mayor que el número de filas de resultados devueltas, se devolverán los datos cursor.arraysize.
fetchone(self): Devuelve una fila de resultado.
scroll(self, value, mode='relative'): Mueve el puntero a una determinada fila. Si mode='relative', significa mover el. barra de valores de la fila actual. Si modo = 'absoluto', significa mover la barra de valores de la primera fila del conjunto de resultados.
El siguiente código es un ejemplo completo.
#Use la instrucción SQL, los parámetros que se recibirán aquí usan marcadores de posición. Cabe señalar que no importa qué tipo de datos desee insertar, el marcador de posición siempre use s
sql="insertar en. cdinfo value(s, s, s, s, s)"
#param debe ser tupla o lista
param=(title, cantante, imgurl, url, alpha) p>
#Ejecución, si tiene éxito, el valor de n es 1
n= cursor.execute(sql, param)
#Ejecutar una consulta nuevamente
cursor.execute("select * from cdinfo")
#Usamos el método fetchall De esta manera, lo que se guarda en cds serán todos los resultados devueltos por la consulta. una tupla escribe datos, y estas tuplas forman una tupla
cds=cursor.fetchall()
#Debido a que es una tupla, puedes usar el conjunto de resultados de esta manera
imprimir cds[0][3]
#o mostrarlo directamente
Ven y mira cómo se ve realmente el conjunto de resultados
imprimir CD
#Si necesitas insertar datos en lotes, haz esto
sql="insertar en valores de cdinfo (0, s, s, s, s, s)"
#El conjunto de cada valor es una tupla y todo el conjunto de parámetros forma una tupla o lista
param=( (title, cantante, imgurl, url, alpha), (título2, cantante2, imgurl2, url2, alpha2))
#Utilice el método ejecutarmany para insertar datos en lotes. ¡Qué método genial!
n=cursor.executemany(sql, param)
Cabe señalar (o lo que me parece extraño) es que después de realizar la operación de inserción, eliminación o modificación, debe llamar al método conn.commit () para enviar. De esta manera, los datos realmente se guardarán en la base de datos. No sé si es un problema con mi configuración de MySQL. hoy, si no utilicé la confirmación, los datos no se conservarán en la base de datos, pero los datos sí permanecieron en la base de datos porque los números automáticos se acumulan y el número de filas afectadas devueltas no es 0. /p>
4. Cerrar la conexión de la base de datos
Necesita cerrar el objeto puntero y el objeto de conexión por separado. Tienen métodos con el mismo nombre
cursor.close(. )
conn.close()
5,
Codificación 5 (para evitar caracteres confusos)
Puntos a tener en cuenta: p>
1 Configuración de archivo Python que codifica utf-8 (agregue delante del archivo #encoding=utf-8)
2 Base de datos MySQL charset=utf-8
3 Python se conecta a MySQL agregando el parámetro charset=utf8
4 Configurando Python La codificación predeterminada es utf-8 (sys.setdefaultencoding(utf-8)
#encoding=utf- 8
importar sistema
importar MySQLdb
recargar(sys)
sys.setdefaultencoding('utf-8')
db=MySQLdb.connect(user='root', charset='utf8')
Nota: los ajustes del archivo de configuración de MySQL también deben configurarse en utf8
6. Demostración de la función del módulo
#!/usr/bin/python
importar MySQLdb
Con= MySQLdb.connect(host='localhost', usuario='root ', passwd='root', db='abc')
cursor =con.cursor()
sql ="select * from myt"
cursor.execute(sql)
fila=cursor.fetchone()
p>imprimir fila
cursor.close()
con.close()
Ejecute la siguiente instrucción SQL para obtener el valor de retorno:
//Obtenga el cursor conectado
cursor=con
n.cursor()
//Consulta
sql = "seleccionar * de la tabla"
//Nuevo
sql = " insertar en la tabla(campo, campo) valores(valor, valor)"
//Modificar
sql = "actualizar conjunto de tabla campo='valor' donde condición"
//Delete
sql = "eliminar de la tabla donde condición"
cursor.execute(sql)
Valor de retorno
cur.execute('select * from table')
El valor de retorno es el número de filas obtenidas por la declaración SQL, como por ejemplo: 2L, que significa 2 filas.
La información de la fila se puede obtener luego del método fetchone o fetchall del objeto.
Obtener información de fila
El método fetchone() del objeto puntero obtiene el valor de retorno de tupla de una fila cada vez:
Referencia
gt; gt; fila=cur.fetchone()
gt; gt; imprimir fila
('usuario1', '52c69e3a57331081823331c4e69d3f2e', '/ home/FTP/user1', '')
El método fetchall() del objeto puntero puede recuperar todas las filas en el conjunto de resultados del puntero, y el conjunto de resultados devuelto es una tupla: p>
Cita
gt;gt;gt; cur.scroll(0,'absolute')
gt;gt;gt; row=cur.fetchall()
gt;gt;gt; imprimir fila
(('usuario1', '52c69e3a57331081823331c4e69d3f2e', 1000L, 1000L, '/home/FTP/usuario1', ''), (' user2', '7e58d63b60197ceb55a1c487989a3720', 1000L, 1000L, '/home/FTP/user2', Ninguno))
Mover el puntero
Cuando se utiliza el método fetchone(), el puntero se moverá. Por lo tanto, si no se restablece el puntero, la información que utiliza fetchall solo contendrá el contenido de la línea después del puntero.
Para mover manualmente el puntero, utilice:
cur.scroll(int, parm)
El significado es:
Referencia
int: el número de filas a mover, un número entero; en modo relativo, un número positivo se mueve hacia abajo y un valor negativo significa moverse hacia arriba.
parm: modo de movimiento, el valor predeterminado es relativo, el modo relativo es aceptable;
Modificar datos
Modificar datos, incluyendo insertar, actualizar y eliminar.
Todos se ejecutan utilizando el método ejecutar() del objeto puntero:
cur.execute("insertar en la tabla (fila1, fila2) valores ('111', '222')")
cur.execute("actualizar conjunto de tabla fila1 = 'prueba' donde fila2 = 'fila2' ")
cur.execute("eliminar de la tabla donde fila1 = 'fila1' ")
Debido a que las comillas simples "'" se utilizan para la identificación en sentencias SQL, las cadenas en Python deben estar entre comillas dobles.
Además, también puede utilizar el método de escritura de "cadena formateada" de Python para simplificar el comando, por ejemplo:
cur.execute("actualizar conjunto de tabla fila1 = 's' donde fila2 = 's' "('valor1', 'valor2'))
※Tenga en cuenta que las comillas simples de 's' son los separadores de declaraciones SQL, y las comillas simples de 'valor1' son Los separadores de cadenas de los símbolos de Python, sus significados son diferentes. Si se requiere un separador y si se utilizan comillas dobles o simples como separadores, depende de su significado. Por ejemplo, existe:
cur.execute("update FTPUSERS set passwd=s donde userid='s' "("md5('123')",'user2'))
Aquí, paswd=s se debe a que la función md5() de SQL no requiere comillas simples; "md5('123')" significa que la cadena de Python contiene comillas simples, por lo que está entre comillas dobles. .
Enviar cambios
En circunstancias normales, el módulo MySQLdb enviará cambios automáticamente. Pero después de actualizar los datos, los ejecutamos manualmente una vez:
conn.commit()
Cerrar la conexión de la base de datos
Necesita cerrar el objeto puntero y el objeto de conexión por separado. Tienen métodos con el mismo nombre
cursor.close()
conn.close()
.