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

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

Большинство ответов здесь сосредоточены на установке библиотеки MySQLdb, я бы действительно предложил выбрать MySQL Connector / Python, предоставляемый MySQL / Oracle, что значительно упрощает процесс: stackoverflow.com/questions/372885/…

Mr. Napik 07.01.2014 01:32

Проблема с использованием Oracle Connector / Python заключается в том, что в нем есть небольшие ошибки и другие проблемы интеграции. Его легко установить, но практически невозможно заставить работать во всех реальных случаях использования, для которых я его пробовал. Поэтому я всегда рекомендую MySQLdb.

Joe C. 29.01.2015 20:06

@ Mr.Napik Я использую pymysql, потому что это чистый бесплатный Python согласно это сравнение.

Cees Timmerman 25.10.2016 21:36
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1 200
3
1 309 952
27

Ответы 27

Вот один из способов сделать это, используя 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()

Ссылка здесь

есть ли необходимость в фиксации в этом примере, поскольку вы не изменяете базу данных?

sumanth232 10.02.2015 19:53

ВНИМАНИЕ - этот модуль не поддерживает часовой пояс при подключении.

kommradHomer 26.02.2015 12:50

Это не работает на моем общем хостинге. Говоря, что No module named MySQLdb. Как я могу использовать mysql с python на общем хостинге. Любая альтернатива?

Bhavesh G 25.04.2015 13:05

@BhaveshGangani, вам нужно будет связаться с вашим хостом и спросить, почему библиотеки Python они поддерживают. Если они поддерживают pypi, вы всегда можете загрузить пакет при развертывании.

George Stocker 25.04.2015 15:10

Не забудьте закрыть объект «db» [db.close ()], иначе вы можете столкнуться с некоторыми проблемами, например, когда у вас есть веб-приложение, которое должно выполнять множество подключений в течение своего жизненного цикла. Я живое доказательство проблем, которые может вызвать "сонное" соединение с приложением, и еще одна вещь: увеличение тайм-аутов базы данных могло бы быть решением, но не рекомендуется оставлять тайм-аут на всю жизнь.

ivanleoncz 19.01.2017 20:17

Вам необходимо установить это, чтобы работать. yum install mysql-python (pip здесь вам не поможет). Использование Centos 6. Кстати.

Philippe Delteil 04.01.2019 17:55

Интересно, что, хотя в документах говорится, что это работает только с python 2, мне кажется, что он работает с python 3 для меня.

lucidbrot 23.08.2019 23:05

Попробуйте использовать 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 ()

ВНИМАНИЕ - этот модуль не поддерживает часовой пояс при подключении.

kommradHomer 26.02.2015 12:51

@kommradHomer Не могли бы вы уточнить, пожалуйста?

Pyderman 17.02.2016 05:27

@kommradHomer - какое значение имеет поддержка часового пояса для вас (или других - особенно при подключении к localhost)?

warren 27.07.2016 21:49

@warren нет, в моем случае я не подключал localhost

kommradHomer 27.07.2016 22:17

Как определить, какая библиотека установлена ​​для подключения к базе данных?

posfan12 08.06.2018 02:03

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

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

Ссылки мертвы, можете ли вы изучить это и обновить правильную ссылку?

Naveen Vijay 15.07.2014 12:20

Извините, по состоянию на июнь 2020 года ваши последние две ссылки все еще не работают.

joe_evans 13.06.2020 23:31

Подключение к MYSQL с помощью Python 2 за три шага

1 - Настройка

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

Для пользователя Windows вы можете получить exe из 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: крошка. Это очень легкий 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), не требуется.

Рад, что тебе понравилась малышка !! Я добавил поддержку MySQL, а также немного документация при интеграции с ним. Удачного взлома!

coleifer 31.10.2011 07:36

Обратите внимание: на момент написания этой статьи MySQLdb не поддерживает Python 3. На странице sourceforge говорится: «Скоро появится поддержка Python 3», но она не обновлялась с 2012-10-08. Для Python 3 есть PyMySQL и наш.

paul 09.05.2013 07:07

Также обратите внимание, что требуется следующее: pip install MySQL-python

Ben Crowhurst 06.09.2013 15:51

Чтобы получить exe MySQLdb для Windows x64: lfd.uci.edu/~gohlke/pythonlibs/#mysql-python

Franck Dernoncourt 15.10.2013 02:46

Этот ответ был бы более полезным на примере подключения к внешнему серверу через нестандартный порт, чтобы показать, как это сделать. Сказать, что localhost - это обычный способ сделать это, - ерунда.

Anthony 22.12.2013 18:49

Изменение одного параметра и добавление «порта» в качестве другого параметра не кажется очень сложным для экстраполяции этого ответа.

e-satis 22.12.2013 19:18

(host = "127.0.0.1", port = 3306, user = "john", ... Не забудьте указать порт --целое число--, если вы хотите подключиться к экземпляру MySql, работающему за пределами Python по умолчанию Этот пример работает с моими экземплярами XAMPP и CPanel.

FredTheWebGuy 28.02.2014 13:56

позвоните cursor.close() после загрузки, если вы больше не собираетесь его использовать (!)

Jorge Leitao 17.06.2014 10:55

close () автоматически вызывается при выходе из скрипта.

e-satis 17.06.2014 13:52

ВНИМАНИЕ - этот модуль не поддерживает часовой пояс при подключении.

kommradHomer 26.02.2015 12:51

@coleifer: ваша ссылка кажется устаревшей, поэтому для новых читателей я бы сказал, что это сейчас: peewee.readthedocs.org/en/latest/peewee/…

dlewin 12.01.2016 14:29

«Этот пример работает из коробки. Не требуется ничего, кроме peewee» - это неправильный. Чтобы использовать MySQLDatabase, вам необходимо установить MySQLdb или PyMySQL (я только что получил такое сообщение об исключении от peewee).

Ayrat 30.03.2016 18:06

Это не работает "из коробки". Я нашел ответ Кена Брауна самым простым и хочу, чтобы он поднялся по лестнице.

wetjosh 13.04.2016 00:07

Прекратите использовать MySqlDB. Сохраните рассудок и используйте pymysql, это чистый питон. Посмотрите пример в моем ответе и ... пожалуйста :) - stackoverflow.com/a/34503728/751528

OkezieE 15.04.2016 17:58

Ваш код в 2 - Использование не помогло мне при попытке использовать оператор INSERT, пока я не добавил db.commit() сразу после строки cur.execute.... Без этой команды фиксации изменения откатывались при закрытии соединения.

Scott 29.05.2016 13:04

Peewee изменил поведение по умолчанию и больше не использует автоматическую фиксацию по умолчанию. Теперь даже ситуация с драйверами БД изменилась. Вопрос требует обновления, но из-за злоупотребления редактированием некоторых моих ответов я их больше не редактирую.

e-satis 01.06.2016 15:57

Обратите внимание, что на данный момент exe-файл для него поддерживает только версии Python до 2.7.

आनंद 29.03.2017 21:57

Как я могу адаптировать этот код для подключения к базе данных Google Cloud MySQL?

matt_js 22.08.2017 18:03

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

  • oursql has real parameterization, sending the SQL and data to MySQL completely separately.
  • oursql allows text or binary data to be streamed into the database and streamed out of the database, instead of requiring everything to be buffered in the client.
  • oursql can both insert rows lazily and fetch rows lazily.
  • oursql has unicode support on by default.
  • oursql supports python 2.4 through 2.7 without any deprecation warnings on 2.6+ (see PEP 218) and without completely failing on 2.7 (see PEP 328).
  • oursql runs natively on 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 - хороший выбор, как уже упоминалось в других ответах.

Я не понимаю, что «работает изначально на python 3.x». Я просто попытался установить его, и setup.py взорвался, потому что он даже не использует вызовы печати, совместимые с Python 3. Звучало отлично, пока я не попробовал.

otakucode 12.10.2015 19:16

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

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

После установки вы можете увидеть несколько примеров использования здесь

это быстрее, чем при использовании mysqldb?

alwbtc 01.09.2013 01:20

Да, это. Кроме того, это менее хлопотно, чем MySQLdb, и, на мой взгляд, API лучше. Это должен быть ответ.

Anthony 22.12.2013 18:44

использование официального mysql-коннектора python - лучший способ выиграть время

Anas 17.04.2014 05:09

Согласитесь, что Connector / Python работает хорошо, его проще настроить, чем MySQLdb, и у него отличная документация, как упоминалось выше в Karthic. И он поддерживает Python 3, которого MySQLdb не поддерживает (пока).

twasbrillig 18.04.2014 03:55

Вам для этого нужен регистр? : /

J0hnG4lt 26.03.2015 20:16

@ J0hnG4lt Вы можете просто щелкнуть «Нет, спасибо, просто начни загрузку» под формой входа (которая на самом деле кажется обязательной, но не является).

ComFreek 22.05.2015 13:28

@ComFreek отлично. Как это лучше? Можем ли мы прекратить применение «рабочего процесса Windows». Есть управление пакетами.

J0hnG4lt 22.05.2015 13:51

Ссылка на приведенные выше примеры не работает, вы можете использовать - dev.mysql.com/doc/connector-python/en/…

San 13.12.2016 07:33

Для Python 3.3

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

У меня на Windows 7 установлен пип, просто pip установить cymysql

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

Вы можете создать новый вопрос по SO и оставить комментарий со ссылкой на него здесь.

Lazik 19.10.2013 21:16

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

Это один пакет (около 110 КБ), чистый 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()

Не все так просто, как вы утверждаете. Когда я попытался установить rpm, у меня возникла пара проблем с зависимостями (FileDigests и PayloadIsXz) от моего RPM: rpm -i mysql-connector-python-1.1.5-1.el6.noarch.rpmerror: Failed dependencies:rpmlib(FileDigests) <= 4.6.0-1 is needed by mysql-connector-python-1.1.5-1.el6.noarchrpmlib(PayloadIsXz) <= 5.2-1 is needed by mysql-connector-python-1.1.5-1.el6.noarch

tatlar 06.02.2014 22:43

В этом случае попробуйте платформенно-независимую версию (для установки которой требуется команда из командной строки ... немного сложнее, чем двойной щелчок), похоже, это зависимости, вызванные упаковкой.

Mr. Napik 17.02.2014 22:48

Раньше я предпочитал эту библиотеку, но она больше не поддерживается в PyPi официально. С тех пор я перешел на MySQLdb.

Steven Mercatante 10.09.2014 21:59

@Arms: больше официально не поддерживается PyPi? У вас есть какой-нибудь источник для этого?

Messa 31.01.2015 19:09

Я перешел на этот модуль для поддержки часового пояса

kommradHomer 26.02.2015 12:50

Вам для этого нужен регистр? : /

J0hnG4lt 26.03.2015 20:16

Вам не нужно регистрироваться. Я считаю, что немного ниже на странице есть ссылка «Нет, спасибо, просто начни загрузку». @ J0hnG4lt

Johan 22.05.2015 17:20
pip install mysql-connector-python тоже подойдет. Я не вижу, где написано, что PyPi больше не поддерживается? Отлично, если у вас нет доступа к компиляторам gcc / C в вашей системе, и поэтому вы не можете установить mysqldb.
decvalts 07.08.2015 12:03

Супер простая установка, отлично работает. Устанавливается с помощью: sudo pip install --egg mysql-connector-python-rf

TimH - Codidact 25.02.2016 00:02

Как уже упоминалось, pip также работает. Если по какой-то причине pip отказывается устанавливать его через pip install mysql-connector-python, проверьте верхний ответ здесь (т.е. получите его прямо из CDN MySQL).

absay 27.07.2016 03:28

Вы также можете установить его через pip прямо из zip-файлов выпусков, подобных этому pip install https://github.com/mysql/mysql-connector-python/archive/2.2.‌​1-m2.zip. Список выпусков можно найти здесь github.com/mysql/mysql-connector-python/releases

Gourneau 05.10.2016 23:06

по состоянию на 7 ноября 2016 года пакет для pip представляет собой просто mysql-connector, pip search mysql-connector, чтобы найти имя пакета. ответ отсюда: stackoverflow.com/a/22829966/2048266

nommer 08.11.2016 03:32

Также обратите внимание на Гроза. Это простой инструмент сопоставления 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: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

Для поиска и использования объекта:

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

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

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

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

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

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

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

Я установил MySQL-python через yum install. Установка была завершена, но я не могу импортировать модуль MySQLdb. Там написано, что такого модуля нет. Есть идеи, почему это так?

user3527975 02.03.2016 08:57

Непонятно, какой ответ вы имеете в виду, когда говорите «ответ выше». Пожалуйста, сделайте свой ответ законченным. Если вы хотите сослаться на другие ответы, пожалуйста, дайте ссылку на конкретный ответ.

Flimm 18.04.2019 12:47

Stop Using MySQLDb if you want to avoid installing mysql headers just to access mysql from python.

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

Монтаж

pip install pymysql

That's it... you are ready to play.

Пример использования из репозитория pymysql на Github

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

ALSO - Replace MySQLdb in existing code quickly and transparently

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

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

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

"Always" немного сильновато ... Что не так с peewee или sqlalchemy? Даже если они существуют как библиотеки ORM, они все равно так же полезны

OneCricketeer 10.02.2016 04:30

Нет, я не думаю, что он вообще силен. Учитывая возможность использования MySQLDb или PyMysql, я думаю, что выбор PyMysql не составляет труда, потому что это простая установка pip без зависимостей, в то время как MySQLDb требует, чтобы файлы заголовков разработки mysql были установлены для вашей платформы ОС, чтобы она работала. Sqlalchemy не учитывает это, потому что ему все еще нужно обернуть модуль, который может взаимодействовать с mysql, например PyMysql, MySQLDb, CyMySQL и т. д. Крошка выглядит интересно, я проверю это

OkezieE 10.02.2016 18:01

@ cricket_007 peewee и sqlalchemly не реализуют свой собственный коннектор db, они предоставляют уровень выше MySQLdb и т. д.

rocksportrocker 04.07.2017 10:44

Я получаю эту ошибку при попытке подключиться к AWS RDS mariadb с помощью pymysql. OperationalError: (1045, "Access denied for user 'admin'@'pool-96-107-103.bstnma.fios.verizon.net' (using password: YES)")

Murtaza Haji 17.06.2020 16:12

@MurtazaHaji, вы получите эту ошибку с любым клиентом mysql, если введете неправильные учетные данные. Проверьте свои учетные данные.

OkezieE 17.06.2020 17:38

Несмотря на все приведенные выше ответы, если вы не хотите заранее подключаться к определенной базе данных, например, если вы хотите создать базу данных (!), Вы можете использовать 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()

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

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 

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

+1 за предложение самого быстрого решения для python 3. Однако mysql.connector и _mysql выдают обе ошибки импорта (хотя второй вариант должен работать в соответствии с документацией). import MySQLdb работает, а потом MySQLdb.connect...

Suzana 16.05.2019 15:59

SqlAlchemy


SQLAlchemy is the Python SQL toolkit and Object Relational Mapper that gives application developers the full power and flexibility of SQL. SQLAlchemy provides a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language.

Монтаж

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

Сначала установите соединитель python-mysql из https://dev.mysql.com/downloads/connector/python/

в консоли Python введите:

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

Вопрос был слишком широким, но этот ответ кажется слишком узким (по крайней мере, в том смысле, что установка и импорт модуля в одиночку не годятся). Также кажется, что оболочка и питон смешаны в одном блоке кода без каких-либо объяснений или намеков относительно того, что куда идет и что делает.

Ondrej K. 08.06.2018 18:37

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

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

cursor = db.cursor()

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

  • sudo apt-get install python-pip

  • sudo pip install -U pip

  • sudo apt-get install 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 ()

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

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

  1. установить соединитель с помощью pip

    pip install mysql-connector-python

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

  1. Используйте connect() метод mysql connector python для подключения к MySQL. Передайте требуемый аргумент методу 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 ("You're 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) для получения данных.

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

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

необработанный sql: select * from FOO;

немедленно выполнить в терминале 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()

вот профиль pymysql:


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:

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

Это соединение Mysql DB

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

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

pip install mysql-connector-python

И запустите это в своем редакторе Python, чтобы подключиться к MySQL:

import mysql.connector

mydb = mysql.connector.connect(
      host = "localhost",
      user = "yusername",
      passwd = "password",
      database = "database_name"
)

Примеры для выполнения команд 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

Не могли бы вы ответить на это? Относится только к mysql-connector. stackoverflow.com/questions/59405740/…

user11363434 19.12.2019 11:26

Некоторые ребята уже ответили на ваш вопрос там. Вы просто забыли запустить mydb.commit() после вставки значений в таблицу

Scott 19.12.2019 13:39

Даже если некоторые из вас могут отметить это как дубликат и расстроиться, что я копирую чей-то ответ, я бы хотел, чтобы В САМОМ ДЕЛЕ выделил один из аспектов ответа г-на Напика. Из-за того, что я пропустил это, я вызвал простои веб-сайта по всей стране (9 минут). Если бы только кто-то поделился этой информацией, я бы это предотвратил!

Вот его код:

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

Здесь важны предложения Пытаться и Ну наконец то. Это позволяет закрывать соединения с ВСЕГДА, независимо от того, что происходит в части кода курсора / sqlstatement. Большое количество активных соединений вызывает скачок DBLoadNoCPU и может привести к сбою сервера db.

Надеюсь, это предупреждение поможет сохранить серверы и, в конечном итоге, рабочие места! : D

PyMySQL 0.10.1 - Дата выпуска: 10 сентября 2020 г., также поддерживает python3.

python3 -m pip install PyMySQL

Простой код:

import pymysql

# Connect to the database
conn = pymysql.connect(host='127.0.0.1',user='root',passwd='root',db='fax')

# Create a Cursor object
cur = conn.cursor()

# Execute the query
cur.execute("SELECT * FROM fax.student")

# Read and print records
for row in cur.fetchall():
    print(row)

выход:

(1, 'Petar', 'Petrovic', 1813, 'Njegusi')
(2, 'Donald', 'Tramp', 1946, 'New York')
(3, 'Bill', 'Gates', 1955, 'Seattle')

Первый шаг к получению библиотеки: Откройте терминал и запустите pip install mysql-python-connector. После установки перейдите ко второму шагу.

Второй шаг для импорта библиотеки: Откройте свой файл python и напишите следующий код: import mysql.connector

Третий шаг для подключения к серверу: Напишите следующий код:

conn = mysql.connector.connect(host=you host name like localhost or 127.0.0.1, username=your username like root, password = your password)

Третий шаг Делаем курсор: Создание курсора упрощает выполнение запросов. Чтобы заставить курсор использовать следующий код: cursor = conn.cursor()

Выполнение запросов: Для выполнения запросов вы можете сделать следующее: cursor.execute(query)

Если запрос изменяет что-либо в таблице, вам необходимо добавить следующий код после выполнения запроса: conn.commit()

Получение значений из запроса: Если вы хотите получить значения из запроса, вы можете сделать следующее: cursor.excecute('SELECT * FROM имя_таблицы') for i in cursor: print(i) #Or for i in cursor.fetchall(): print(i)

Метод fetchall () возвращает список с множеством кортежей, содержащих запрошенные вами значения, строка за строкой.

Закрытие соединения: Чтобы закрыть соединение, вы должны использовать следующий код: conn.close()

Обработка исключения: Для исключения Генделя вы можете сделать это следующим способом: try: #Logic pass except mysql.connector.errors.Error: #Logic pass Чтобы использовать базу данных: Например, вы являетесь системой создания учетных записей, в которой вы храните данные в базе данных с именем blabla, вы можете просто добавить параметр базы данных в метод connect (), например

Имя базы данных mysql.connector.connect(database = )

не удаляйте другую информацию, такую ​​как хост, имя пользователя, пароль.

Очень хороший коннектор для MySQL и MariaDB - mysql-connector-python. Он написан на Python, поэтому вы можете изменить его, когда захотите.

Вы можете установить его, выполнив следующие команды:

pip3 uninstall mysql-connector
pip3 install mysql-connector-python

Затем вы можете использовать его со следующим кодом:

import mysql.connector

database = mysql.connector.connect(
    host='localhost',
    user='db_username,
    password='passwd',
    database='db_name',
    autocommit=True
)
cursor = database.cursor()

cursor.execute('SELECT * FROM users')

You can pass the autocommit parameter and set it to True. In this way you will not have to call database.commit() every time you update the database. Also you can prevent some errors I have mentioned in another question.

Внешние ссылки

  1. Соединитель Python MySQL
  2. SQL (язык структурированных запросов)

Другой вариант, если вы просто хотите построить некоторые данные из базы данных, - использовать Jupyter ядро, он разработан для MariaDB, но он также должен легко работать с MySQL.

Другие вопросы по теме