Как подключиться к базе данных MySQL в Python?

Как подключиться к базе данных MySQL с помощью программы python?

Ответы

Ответ 1

Подключение к MYSQL с Python 2 в три этапа

1 - Настройка

Вы должны установить драйвер MySQL, прежде чем делать что-либо. В отличие от PHP, только драйвер SQLite по умолчанию устанавливается вместе с Python. Наиболее используемый пакет для этого - MySQLdb, но его трудно установить с помощью easy_install. Обратите внимание, что MySQLdb поддерживает только Python 2.

Для пользователя Windows вы можете получить исполняемый файл MySQLdb.

Для Linux это случайный пакет (python-mysqldb). (Вы можете использовать sudo apt-get install python-mysqldb (для дистрибутивов на основе Debian), yum install MySQL-python (для rpm) или dnf install python-mysql (для современного дистрибутива fedora) в командной строке для загрузки.)

Для Mac вы можете установить MySQLdb, используя Macport.

2 - Использование

После установки перезагрузите компьютер. Это не обязательно, но это не даст мне ответить на 3 или 4 других вопроса в этом посте, если что-то пойдет не так. Поэтому, пожалуйста, перезагрузитесь.

Тогда это похоже на использование любого другого пакета:

#!/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()

Конечно, есть тысячи возможностей и вариантов; это очень простой пример. Вам придется посмотреть на документацию. Хорошая отправная точка.

3 - Более продвинутое использование

Как только вы узнаете, как это работает, вы можете использовать ORM, чтобы избежать написания SQL вручную и манипулировать вашими таблицами, как они были объектами Python. Самым известным ORM в сообществе Python является SQLAlchemy.

Я настоятельно советую вам использовать его: ваша жизнь будет намного проще.

Недавно я обнаружил еще одну драгоценность в мире Python: peewee. Это очень легкий ORM, его очень легко и быстро настроить, а затем использовать. Это делает мой день для небольших проектов или автономных приложений, где использование больших инструментов, таких как SQLAlchemy или Django, излишне:

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

Этот пример работает из коробки. Ничего, кроме наличия peewee (pip install peewee) не требуется.

Ответ 2

Вот один из способов сделать это, используя MySQLdb, который поддерживает только Python 2:

#!/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()

Ссылка здесь

Ответ 3

Oracle (MySQL) теперь поддерживает чистый коннектор Python. Это означает, что для установки нет двоичных файлов: это просто библиотека Python. Он называется "Connector/Python".

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

Ответ 4

Если вам не нужен MySQLdb, но я бы принял любую библиотеку, я бы очень-очень рекомендовал MySQL Connector/Python из MySQL: http://dev.mysql.com/downloads/connector/python/.

Это один пакет (около 110k), чистый Python, поэтому он независим от системы и мертв, простота установки. Вы просто загружаете, дважды щелкаете, подтверждаете лицензионное соглашение и идите. Нет необходимости в Xcode, MacPorts, компиляции, перезапуске...

Затем вы подключаетесь как:

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()

Ответ 5

Остановить использование MySQLDb, если вы хотите избежать установки заголовков mysql только для доступа к mysql из python.

Используйте pymysql. Он делает все, что делает MySQLDb, но реализован исключительно на Python с НЕТ внешних зависимостей. Это делает процесс установки на всех операционных системах последовательным и легким. pymysql является заменой для MySQLDb и IMHO, нет оснований когда-либо использовать MySQLDb для чего-либо... КОГДА-ЛИБО! - PTSD from installing MySQLDb on Mac OSX and *Nix systems, но это только я.

Установка

pip install pymysql

Что ты... ты готов играть.

Пример использования 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, ('[email protected]', '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, ('[email protected]',))
        result = cursor.fetchone()
        print(result)
finally:
    connection.close()

ТАКЖЕ - быстро и прозрачно заменяйте MySQLdb в существующем коде

Если у вас есть существующий код, который использует MySQLdb, вы можете легко заменить его на pymysql, используя этот простой процесс:

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

Все последующие ссылки на MySQLdb будут использовать pymysql прозрачно.

Ответ 6

Попробуйте использовать MySQLdb. MySQLdb поддерживает только Python 2.

Здесь есть страница с инструкциями: http://www.kitebird.com/articles/pydbapi.html


Со страницы:

# 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 ()

Ответ 7

В качестве драйвера db существует также oursql. Некоторые из причин, перечисленных в этой ссылке, которые говорят, почему oursql лучше:

  • oursql имеет реальную параметризацию, посылая SQL и данные в MySQL полностью отдельно.
  • oursql позволяет передавать текстовые или двоичные данные в базу данных и выводиться из базы данных, вместо того чтобы требовать, чтобы все было буферизовано в клиенте.
  • oursql может вставлять строки лениво и извлекать строки лениво.
  • По умолчанию ussql поддерживает поддержку unicode.
  • oursql поддерживает python с 2.4 по 2.7 без каких-либо предупреждений об отказе от версии 2.6+ (см. PEP 218) и без полного отказа 2,7 (см. PEP 328).
  • oursql запускается изначально на python 3.x.

Итак, как подключиться к mysql с oursql?

Очень похоже на 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]

учебник в документации довольно приличный.

И, конечно, для ORM SQLAlchemy - хороший выбор, как уже упоминалось в других ответах.

Ответ 8

Несмотря на все ответы выше, если вы не хотите подключаться к определенной базе данных заранее, например, если вы хотите создать базу данных еще (!), вы можете использовать connection.select_db(database), как показано ниже.

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()

Ответ 9

SQLAlchemy


SQLAlchemy - это набор инструментов Python SQL и Object Relational Mapper, который предоставляет разработчикам приложений полную мощь и гибкость SQL. SQLAlchemy предоставляет полный набор хорошо известных шаблонов персистентности корпоративного уровня, предназначенных для эффективного и высокопроизводительного доступа к базе данных, адаптированных к простому языку домена Pythonic.

Монтаж

pip install sqlalchemy

RAW запрос

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session

engine = create_engine("mysql://<user_name>:<password>@<host_name>/<db_name>")
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()

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://<user_name>:<password>@<host_name>/<db_name>")
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()

Ответ 10

MySQLdb - это простой способ. Вы можете выполнить SQL-запросы по соединению. Период.

Мой предпочтительный способ, который также является pythonic, заключается в использовании мощного SQLAlchemy. Вот связанный с запросом учебник, и вот учебник по Возможности ORM SQLALchemy.

Ответ 11

Просто модификация выше ответа. Просто запустите эту команду, чтобы установить mysql для python

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

помню! Он чувствителен к регистру.

Ответ 12

для Python3.6 я нашел два драйвера: pymysql и mysqlclient. Я проверил производительность между ними и получил результат: mysqlclient работает быстрее.

ниже мой тестовый процесс (нужно установить python lib profilehooks для анализа прошедшего времени:

raw sql: select * from FOO;

немедленно выполнить в терминале MySQL: 46410 rows in set (0.10 sec)

Pymysql (2,4 с):

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()

здесь профиль pymysql: enter image description here


mysqlclient (0.4с)

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()

вот профиль mysqlclient: enter image description here

Итак, похоже, что mysqlclient намного быстрее, чем pymysql

Ответ 13

Лучший способ подключиться к MySQL из python - это использовать MySQL Connector/Python, потому что это официальный драйвер Oracle для MySQL для работы с Python и он работает как с Python 3, так и с Python 2.

выполните шаги, указанные ниже, чтобы подключить MySQL

  1. установить разъем с помощью пипса

    pip install mysql-connector-python

или вы можете скачать установщик с https://dev.mysql.com/downloads/connector/python/

  1. Используйте метод connect() Python коннектора mysql для подключения к MySQL.pass обязательный аргумент метода connect(). т.е. хост, имя пользователя, пароль и имя базы данных.

  2. Создайте объект cursor из объекта подключения, возвращенного методом connect() для выполнения запросов SQL.

  3. закройте соединение после завершения вашей работы.

Пример:

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()

Ссылка - https://pynative.com/python-mysql-database-connection/

Важный API MySQL Connector Python

  • Для операций DML - используйте cursor.execute() и cursor.executemany() для запуска запроса. и после этого используйте connection.commit() чтобы сохранить ваши изменения в БД

  • Для извлечения данных - используйте cursor.execute() для запуска запроса, а cursor.fetchall(), cursor.fetchone(), cursor.fetchmany(SIZE) для извлечения данных.

Ответ 14

Также посмотрите Storm. Это простой инструмент сопоставления SQL, который позволяет вам легко редактировать и создавать записи SQL без написания запросов.

Вот простой пример:

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:[email protected]: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

Чтобы найти и использовать объект:

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

Найти с помощью первичного ключа:

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

Для получения дополнительной информации см. tutorial.

Ответ 15

mysqlclient является лучшим, поскольку другие обеспечивают поддержку только определенных версий Python

 pip install mysqlclient

пример кода

    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())

см. https://github.com/PyMySQL/mysqlclient-python

Ответ 16

сначала установите драйвер

pip install MySQL-python   

Затем базовый код будет выглядеть следующим образом:

#!/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 

Ответ 17

Вы можете подключить свой код Python к MySQL таким образом.

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

cursor = db.cursor()

Ответ 18

Это 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()

Ответ 19

Выполните эту команду в своем терминале, чтобы установить соединитель mysql:

pip install mysql-connector-python

И запустите это в вашем редакторе Python для подключения к MySQL:

import mysql.connector

mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      passwd="yourpassword",
      database="mydatabase"
)

Примеры для выполнения команд MySQL (в вашем языке Python):

mycursor = mydb.cursor()
mycursor.execute("CREATE TABLE customers (name VARCHAR(255), address VARCHAR(255))")    
mycursor.execute("SHOW TABLES")

mycursor.execute("INSERT INTO customers (name, address) VALUES ('John', 'Highway 21')")    
mydb.commit() # Use this command after insert or update

Для дополнительных команд: https://www.w3schools.com/python/python_mysql_getstarted.asp

Ответ 20

Для python 3.3

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

У меня есть pip, установленный на моих окнах 7, просто pip install cymysql

(вам не нужен cython) быстрый и безболезненный

Ответ 21

Сначала установите драйвер (Ubuntu)

  • sudo apt-get установить python-pip

  • sudo pip install -U pip

  • sudo apt-get установить python-dev libmysqlclient-dev

  • sudo apt-get установить MySQL-python

Коды подключения к базе данных 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 ()