¿Cómo me conecto a una base de datos MySQL en Python?

¿Cómo me conecto a una base de datos MySQL usando un progtwig python?

Conectando a MYSQL con Python en 3 pasos

1 – Ajuste

Debe instalar un controlador MySQL antes de hacer nada. A diferencia de PHP, solo el controlador SQLite se instala de forma predeterminada con Python. El paquete más utilizado para hacerlo es MySQLdb, pero es difícil de instalar con easy_install.

Para usuarios de Windows, puede obtener un exe de MySQLdb .

Para Linux, este es un paquete informal (python-mysqldb). (Puede usar sudo apt-get install python-mysqldb (para distribuciones basadas en debian), yum install MySQL-python (para rpm)) o dnf install python-mysql (para la distribución de fedora moderna) en la línea de comandos para descargar.)

Para Mac, puedes instalar MySQLdb usando Macport .

2 – Uso

Después de instalar, reinicie. Esto no es obligatorio, pero me impedirá responder 3 o 4 preguntas más en esta publicación si algo sale mal. Así que por favor reinicie.

Entonces es como usar cualquier otro paquete:

 #!/usr/bin/python import MySQLdb db = MySQLdb.connect(host="localhost", # your host, usually localhost user="john", # your username passwd="megajonhy", # your password db="jonhydb") # name of the data base # you must create a Cursor object. It will let # you execute all the queries you need cur = db.cursor() # Use all the SQL you like cur.execute("SELECT * FROM YOUR_TABLE_NAME") # print all the first cell of all the rows for row in cur.fetchall(): print row[0] db.close() 

Por supuesto, hay miles de posibilidades y opciones; Este es un ejemplo muy básico. Tendrás que mirar la documentación. Un buen punto de partida .

3 – Uso más avanzado

Una vez que sepa cómo funciona, puede usar un ORM para evitar escribir SQL manualmente y manipular sus tablas como si fueran objetos de Python. El ORM más famoso en la comunidad de Python es SQLAlchemy .

Te aconsejo encarecidamente que lo uses: tu vida será mucho más fácil.

Recientemente descubrí otra joya en el mundo de Python: peewee . Es un ORM muy simple, realmente fácil y rápido de configurar y usar. Hace que mi día sea para proyectos pequeños o aplicaciones independientes, donde el uso excesivo de herramientas como SQLAlchemy o Django es excesivo:

 import peewee from peewee import * db = MySQLDatabase('jonhydb', user='john', passwd='megajonhy') class Book(peewee.Model): author = peewee.CharField() title = peewee.TextField() class Meta: database = db Book.create_table() book = Book(author="me", title='Peewee is cool') book.save() for book in Book.filter(author="me"): print book.title 

Este ejemplo funciona fuera de la caja. No se requiere nada más que tener peewee ( pip install peewee ).

Aquí hay una forma de hacerlo:

 #!/usr/bin/python import MySQLdb # Connect db = MySQLdb.connect(host="localhost", user="appuser", passwd="", db="onco") cursor = db.cursor() # Execute SQL select statement cursor.execute("SELECT * FROM location") # Commit your changes if writing # In this case, we are only reading data # db.commit() # Get the number of rows in the resultset numrows = cursor.rowcount # Get and display one row at a time for x in range(0, numrows): row = cursor.fetchone() print row[0], "-->", row[1] # Close the connection db.close() 

Referencia aqui

Oracle (MySQL) ahora es compatible con un conector de Python puro. Eso significa que no hay que instalar binarios: es solo una biblioteca de Python. Se llama “Conector / Python”.

http://dev.mysql.com/downloads/connector/python/

Si no necesita MySQLdb, pero aceptaría cualquier biblioteca, le recomendaría mucho, MySQL Connector / Python de MySQL: http://dev.mysql.com/downloads/connector/python/ .

Es un paquete (alrededor de 110 k), puro Python, por lo que es independiente del sistema y es muy sencillo de instalar. Simplemente descargue, haga doble clic, confirme el acuerdo de licencia y listo. No hay necesidad de Xcode, MacPorts, comstackción, reinicio …

Entonces te conectas como:

 import mysql.connector cnx = mysql.connector.connect(user='scott', password='tiger', host='127.0.0.1', database='employees') try: cursor = cnx.cursor() cursor.execute(""" select 3 from your_table """) result = cursor.fetchall() print result finally: cnx.close() 

Deje de usar MySQLDb si desea evitar instalar encabezados mysql solo para acceder a mysql desde python.

Utilice pymysql . Hace todo lo que hace MySQLDb, pero se implementó únicamente en Python SIN NINGUNA dependencia externa . Esto hace que el proceso de instalación en todos los sistemas operativos sea consistente y fácil. pymysql es un reemplazo para MySQLDb y IMHO, no hay razón para usar MySQLDb para nada … ¡NUNCA! – PTSD from installing MySQLDb on Mac OSX and *Nix systems , pero eso es solo yo.

Instalación

pip install pymysql

Eso es todo … estás listo para jugar.

Ejemplo de uso de pymysql Github repo

 import pymysql.cursors import pymysql # Connect to the database connection = pymysql.connect(host='localhost', user='user', password='passwd', db='db', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor) try: with connection.cursor() as cursor: # Create a new record sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)" cursor.execute(sql, ('webmaster@python.org', 'very-secret')) # connection is not autocommit by default. So you must commit to save # your changes. connection.commit() with connection.cursor() as cursor: # Read a single record sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s" cursor.execute(sql, ('webmaster@python.org',)) result = cursor.fetchone() print(result) finally: connection.close() 

TAMBIÉN – Reemplace MySQLdb en el código existente de forma rápida y transparente

Si tiene un código existente que usa MySQLdb, puede reemplazarlo fácilmente con pymysql usando este simple proceso:

 # import MySQLdb << Remove this line and replace with: import pymysql pymysql.install_as_MySQLdb() 

Todas las referencias posteriores a MySQLdb utilizarán pymysql de forma transparente.

Como un controlador de db, también está nuestro . Algunas de las razones enumeradas en ese enlace, que dicen por qué es mejor nuestro sql:

  • Oursql tiene una parametrización real, enviando el SQL y los datos a MySQL por separado.
  • oursql permite que los datos de texto o binarios se transmitan a la base de datos y se emitan fuera de la base de datos, en lugar de requerir que todo se almacene en el servidor.
  • oursql puede tanto insertar filas perezosamente como recuperar filas perezosamente.
  • Oursql tiene compatibilidad con Unicode de forma predeterminada.
  • oursql admite Python 2.4 a 2.7 sin advertencias de desaprobación en 2.6+ (ver PEP 218) y sin fallar completamente en 2.7 (ver PEP 328).
  • Oursql se ejecuta de forma nativa en Python 3.x.

Entonces, ¿cómo conectarse a mysql con oursql?

Muy similar a mysqldb:

 import oursql db_connection = oursql.connect(host='127.0.0.1',user='foo',passwd='foobar',db='db_name') cur=db_connection.cursor() cur.execute("SELECT * FROM `tbl_name`") for row in cur.fetchall(): print row[0] 

El tutorial en la documentación es bastante decente.

Y, por supuesto, para ORM SQLAlchemy es una buena opción, como ya se mencionó en las otras respuestas.

Intenta usar MySQLdb

Hay una página de cómo hacerlo aquí: http://www.kitebird.com/articles/pydbapi.html


Desde la página:

 # server_version.py - retrieve and display database server version import MySQLdb conn = MySQLdb.connect (host = "localhost", user = "testuser", passwd = "testpass", db = "test") cursor = conn.cursor () cursor.execute ("SELECT VERSION()") row = cursor.fetchone () print "server version:", row[0] cursor.close () conn.close () 

A pesar de todas las respuestas anteriores, en caso de que no desee conectarse a una base de datos específica por adelantado, por ejemplo, si desea crear la base de datos aún (!), Puede usar connection.select_db(database) , como se muestra a continuación.

 import pymysql.cursors connection = pymysql.connect(host='localhost', user='mahdi', password='mahdi', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor) cursor = connection.cursor() cursor.execute("CREATE DATABASE IF NOT EXISTS "+database) connection.select_db(database) sql_create = "CREATE TABLE IF NOT EXISTS "+tablename+(timestamp DATETIME NOT NULL PRIMARY KEY)" cursor.execute(sql_create) connection.commit() cursor.close() 

SqlAlchemy


SQLAlchemy es el kit de herramientas SQL de Python y el Mapeador relacional de objetos que ofrece a los desarrolladores de aplicaciones la máxima potencia y flexibilidad de SQL. SQLAlchemy proporciona un conjunto completo de patrones de persistencia conocidos a nivel empresarial, diseñados para un acceso a bases de datos eficiente y de alto rendimiento, adaptados a un lenguaje de dominio simple y Pythonic.

Instalación

 pip install sqlalchemy 

Consulta RAW

 from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker, scoped_session engine = create_engine("mysql://:@/") session_obj = sessionmaker(bind=engine) session = scoped_session(session_obj) # insert into database session.execute("insert into person values(2, 'random_name')") session.flush() session.commit() 

Forma ORM

 from sqlalchemy import Column, Integer, String from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker, scoped_session Base = declarative_base() engine = create_engine("mysql://:@/") session_obj = sessionmaker(bind=engine) session = scoped_session(session_obj) # Bind the engine to the metadata of the Base class so that the # declaratives can be accessed through a DBSession instance Base.metadata.bind = engine class Person(Base): __tablename__ = 'person' # Here we define columns for the table person # Notice that each column is also a normal Python instance attribute. id = Column(Integer, primary_key=True) name = Column(String(250), nullable=False) # insert into database person_obj = Person(id=12, name="name") session.add(person_obj) session.flush() session.commit() 

MySQLdb es la forma más sencilla. Tienes la oportunidad de ejecutar consultas SQL a través de una conexión. Período.

Mi forma preferida, que también es pythonic, es usar el poderoso SQLAlchemy en su lugar. Aquí hay un tutorial relacionado con consultas , y aquí hay un tutorial sobre las capacidades ORM de SQLALchemy.

Sólo una modificación en la respuesta anterior. Simplemente ejecuta este comando para instalar mysql para python

 sudo yum install MySQL-python sudo apt-get install MySQL-python 

¡recuerda! Es sensible a las mayúsculas y minúsculas.

También eche un vistazo a la tormenta . Es una herramienta de asignación de SQL simple que le permite editar y crear fácilmente entradas de SQL sin escribir las consultas.

Aquí hay un ejemplo simple:

 from storm.locals import * # User will be the mapped object; you have to create the table before mapping it class User(object): __storm_table__ = "user" # table name ID = Int(primary=True) #field ID name= Unicode() # field name database = create_database("mysql://root:password@localhost:3306/databaseName") store = Store(database) user = User() user.name = u"Mark" print str(user.ID) # None store.add(user) store.flush() # ID is AUTO_INCREMENT print str(user.ID) # 1 (ID) store.commit() # commit all changes to the database 

Para buscar y objetar uso:

 michael = store.find(User, User.name == u"Michael").one() print str(user.ID) # 10 

Encontrar con clave primaria:

 print store.get(User, 1).name #Mark 

Para más información ver el tutorial .

La mejor manera de conectarse a MySQL desde Python es Usar MySQL Connector / Python porque es el controlador oficial de Oracle para MySQL para trabajar con Python y funciona tanto con Python 3 como con Python 2.

siga los pasos mencionados a continuación para conectar MySQL

  1. instale el conector usando pip

    pip install mysql-connector-python

o puede descargar el instalador desde https://dev.mysql.com/downloads/connector/python/

  1. Use el método connect() de mysql connector python para conectarse a MySQL. Pase el argumento requerido para connect() . Ej. Host, nombre de usuario, contraseña y nombre de la base de datos.

  2. Cree el objeto del cursor partir del objeto de conexión devuelto por el método connect() para ejecutar consultas SQL.

  3. Cierre la conexión después de que su trabajo se complete.

Ejemplo :

 import mysql.connector from mysql.connector import Error try: conn = mysql.connector.connect(host='hostname', database='db', user='root', password='passcode') if conn.is_connected(): cursor = conn.cursor() cursor.execute("select database();") record = cursor.fetchall() print ("Your connected to - ", record) except Error as e : print ("Print your error msg", e) finally: #closing database connection. if(conn.is_connected()): cursor.close() conn.close() 

Referencia: https://pynative.com/python-mysql-database-connection/

API importante de MySQL Connector Python

  • Para operaciones DML: use cursor.execute() y cursor.executemany() para ejecutar la consulta. y después de esto use connection.commit() para persistir sus cambios a la base de datos

  • Para obtener datos: use cursor.execute() para ejecutar query y cursor.fetchall() , cursor.fetchone() , cursor.fetchmany(SIZE) para recuperar datos

para Python3.6 encontré dos controladores: pymysql y mysqlclient. Probé el rendimiento entre ellos y obtuve el resultado: mysqlclient es más rápido.

a continuación se encuentra mi proceso de prueba (necesito instalar las activaciones de perfil lib de python para analizar el tiempo transcurrido :

raw sql: select * from FOO;

Ejecutar inmediatamente en el terminal mysql: 46410 rows in set (0.10 sec)

pymysql (2.4s):

 from profilehooks import profile import pymysql.cursors import pymysql connection = pymysql.connect(host='localhost', user='root', db='foo') c = connection.cursor() @profile(immediate=True) def read_by_pymysql(): c.execute("select * from FOO;") res = c.fetchall() read_by_pymysql() 

Aquí está el perfil pymysql: introduzca la descripción de la imagen aquí

mysqlclient (0.4s)

 from profilehooks import profile import MySQLdb connection = MySQLdb.connect(host='localhost', user='root', db='foo') c = connection.cursor() @profile(immediate=True) def read_by_mysqlclient(): c.execute("select * from FOO;") res = c.fetchall() read_by_mysqlclient() 

Aquí está el perfil mysqlclient: introduzca la descripción de la imagen aquí

Entonces, parece que mysqlclient es mucho más rápido que pymysql

mysqlclient es el mejor ya que otros solo brindan soporte para versiones específicas de python

  pip install mysqlclient 

código de ejemplo

  import mysql.connector import _mysql db=_mysql.connect("127.0.0.1","root","umer","sys") #db=_mysql.connect(host,user,password,db) # Example of how to insert new values: db.query("""INSERT INTO table1 VALUES ('01', 'myname')""") db.store_result() db.query("SELECT * FROM new1.table1 ;") #new1 is scheme table1 is table mysql res= db.store_result() for i in range(res.num_rows()): print(result.fetch_row()) 

vea https://github.com/PyMySQL/mysqlclient-python

primero instala el controlador

 pip install MySQL-python 

Entonces un código básico es el siguiente:

 #!/usr/bin/python import MySQLdb try: db = MySQLdb.connect(host="localhost", # db server, can be a remote one db="mydb" # database user="mydb", # username passwd="mydb123", # password for this username ) # Create a Cursor object cur = db.cursor() # Create a query string. It can contain variables query_string = "SELECT * FROM MY_TABLE" # Execute the query cur.execute(query_string) # Get all the rows present the database for each_row in cur.fetchall(): print each_row # Close the connection db.close() except Exception, e: print 'Error ', e 

Puedes conectar tu código python a mysql de esta manera.

 import MySQLdb db = MySQLdb.connect(host="localhost", user="appuser", passwd="", db="onco") cursor = db.cursor() 

Esta es la conexión de base de datos Mysql

 from flask import Flask, render_template, request from flask_mysqldb import MySQL app = Flask(__name__) app.config['MYSQL_HOST'] = 'localhost' app.config['MYSQL_USER'] = 'root' app.config['MYSQL_PASSWORD'] = 'root' app.config['MYSQL_DB'] = 'MyDB' mysql = MySQL(app) @app.route('/', methods=['GET', 'POST']) def index(): if request.method == "POST": details = request.form cur = mysql.connection.cursor() cur.execute ("_Your query_") mysql.connection.commit() cur.close() return 'success' return render_template('index.html') if __name__ == '__main__': app.run() 

Para python 3.3

CyMySQL https://github.com/nakagami/CyMySQL

Tengo pip instalado en mi Windows 7, solo instale cymysql

(no necesitas cython) rápido y sin dolor

Primero instale el controlador (Ubuntu)

  • sudo apt-get install python-pip

  • sudo pip install -u pip

  • sudo apt-get install python-dev libmysqlclient-dev

  • sudo apt-get install MySQL-python

Códigos de conexión de base de datos MySQL

 import MySQLdb conn = MySQLdb.connect (host = "localhost",user = "root",passwd = "pass",db = "dbname") cursor = conn.cursor () cursor.execute ("SELECT VERSION()") row = cursor.fetchone () print "server version:", row[0] cursor.close () conn.close () 

Primero, instale el conector python-mysql desde https://dev.mysql.com/downloads/connector/python/

en la consola de Python ingrese:

 pip install mysql-connector-python-rf import mysql.connector