Как мне подключиться к базе данных MySQL с помощью программы Python?
Проблема с использованием Oracle Connector / Python заключается в том, что в нем есть небольшие ошибки и другие проблемы интеграции. Его легко установить, но практически невозможно заставить работать во всех реальных случаях использования, для которых я его пробовал. Поэтому я всегда рекомендую MySQLdb.
@ Mr.Napik Я использую pymysql, потому что это чистый бесплатный Python согласно это сравнение.






Вот один из способов сделать это, используя 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()
есть ли необходимость в фиксации в этом примере, поскольку вы не изменяете базу данных?
ВНИМАНИЕ - этот модуль не поддерживает часовой пояс при подключении.
Это не работает на моем общем хостинге. Говоря, что No module named MySQLdb. Как я могу использовать mysql с python на общем хостинге. Любая альтернатива?
@BhaveshGangani, вам нужно будет связаться с вашим хостом и спросить, почему библиотеки Python они поддерживают. Если они поддерживают pypi, вы всегда можете загрузить пакет при развертывании.
Не забудьте закрыть объект «db» [db.close ()], иначе вы можете столкнуться с некоторыми проблемами, например, когда у вас есть веб-приложение, которое должно выполнять множество подключений в течение своего жизненного цикла. Я живое доказательство проблем, которые может вызвать "сонное" соединение с приложением, и еще одна вещь: увеличение тайм-аутов базы данных могло бы быть решением, но не рекомендуется оставлять тайм-аут на всю жизнь.
Вам необходимо установить это, чтобы работать. yum install mysql-python (pip здесь вам не поможет). Использование Centos 6. Кстати.
Интересно, что, хотя в документах говорится, что это работает только с python 2, мне кажется, что он работает с python 3 для меня.
Попробуйте использовать 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 Не могли бы вы уточнить, пожалуйста?
@kommradHomer - какое значение имеет поддержка часового пояса для вас (или других - особенно при подключении к localhost)?
@warren нет, в моем случае я не подключал localhost
Как определить, какая библиотека установлена для подключения к базе данных?
MySQLdb - простой способ. Вы можете выполнять SQL-запросы через соединение. Период.
Мой предпочтительный способ, который также является питоническим, - это использовать вместо него мощный SQLAlchemy. Вот руководство по связанный с запросом, а вот руководство по Возможности ORM в SQLALchemy.
Ссылки мертвы, можете ли вы изучить это и обновить правильную ссылку?
Извините, по состоянию на июнь 2020 года ваши последние две ссылки все еще не работают.
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, а также немного документация при интеграции с ним. Удачного взлома!
Обратите внимание: на момент написания этой статьи MySQLdb не поддерживает Python 3. На странице sourceforge говорится: «Скоро появится поддержка Python 3», но она не обновлялась с 2012-10-08. Для Python 3 есть PyMySQL и наш.
Также обратите внимание, что требуется следующее: pip install MySQL-python
Чтобы получить exe MySQLdb для Windows x64: lfd.uci.edu/~gohlke/pythonlibs/#mysql-python
Этот ответ был бы более полезным на примере подключения к внешнему серверу через нестандартный порт, чтобы показать, как это сделать. Сказать, что localhost - это обычный способ сделать это, - ерунда.
Изменение одного параметра и добавление «порта» в качестве другого параметра не кажется очень сложным для экстраполяции этого ответа.
(host = "127.0.0.1", port = 3306, user = "john", ... Не забудьте указать порт --целое число--, если вы хотите подключиться к экземпляру MySql, работающему за пределами Python по умолчанию Этот пример работает с моими экземплярами XAMPP и CPanel.
позвоните cursor.close() после загрузки, если вы больше не собираетесь его использовать (!)
close () автоматически вызывается при выходе из скрипта.
ВНИМАНИЕ - этот модуль не поддерживает часовой пояс при подключении.
@coleifer: ваша ссылка кажется устаревшей, поэтому для новых читателей я бы сказал, что это сейчас: peewee.readthedocs.org/en/latest/peewee/…
«Этот пример работает из коробки. Не требуется ничего, кроме peewee» - это неправильный. Чтобы использовать MySQLDatabase, вам необходимо установить MySQLdb или PyMySQL (я только что получил такое сообщение об исключении от peewee).
Это не работает "из коробки". Я нашел ответ Кена Брауна самым простым и хочу, чтобы он поднялся по лестнице.
Прекратите использовать MySqlDB. Сохраните рассудок и используйте pymysql, это чистый питон. Посмотрите пример в моем ответе и ... пожалуйста :) - stackoverflow.com/a/34503728/751528
Ваш код в 2 - Использование не помогло мне при попытке использовать оператор INSERT, пока я не добавил db.commit() сразу после строки cur.execute.... Без этой команды фиксации изменения откатывались при закрытии соединения.
Peewee изменил поведение по умолчанию и больше не использует автоматическую фиксацию по умолчанию. Теперь даже ситуация с драйверами БД изменилась. Вопрос требует обновления, но из-за злоупотребления редактированием некоторых моих ответов я их больше не редактирую.
Обратите внимание, что на данный момент exe-файл для него поддерживает только версии Python до 2.7.
Как я могу адаптировать этот код для подключения к базе данных Google Cloud MySQL?
В качестве драйвера 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.
Очень похоже на 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. Звучало отлично, пока я не попробовал.
Oracle (MySQL) теперь поддерживает коннектор на чистом Python. Это означает, что не нужно устанавливать двоичные файлы: это просто библиотека Python. Он называется «Коннектор / Python».
http://dev.mysql.com/downloads/connector/python/
После установки вы можете увидеть несколько примеров использования здесь
это быстрее, чем при использовании mysqldb?
Да, это. Кроме того, это менее хлопотно, чем MySQLdb, и, на мой взгляд, API лучше. Это должен быть ответ.
использование официального mysql-коннектора python - лучший способ выиграть время
Согласитесь, что Connector / Python работает хорошо, его проще настроить, чем MySQLdb, и у него отличная документация, как упоминалось выше в Karthic. И он поддерживает Python 3, которого MySQLdb не поддерживает (пока).
Вам для этого нужен регистр? : /
@ J0hnG4lt Вы можете просто щелкнуть «Нет, спасибо, просто начни загрузку» под формой входа (которая на самом деле кажется обязательной, но не является).
@ComFreek отлично. Как это лучше? Можем ли мы прекратить применение «рабочего процесса Windows». Есть управление пакетами.
Ссылка на приведенные выше примеры не работает, вы можете использовать - dev.mysql.com/doc/connector-python/en/…
Для Python 3.3
CyMySQL https://github.com/nakagami/CyMySQL
У меня на Windows 7 установлен пип, просто pip установить cymysql
(вам не нужен Cython) быстро и безболезненно
Вы можете создать новый вопрос по SO и оставить комментарий со ссылкой на него здесь.
Если вам не нужен 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
В этом случае попробуйте платформенно-независимую версию (для установки которой требуется команда из командной строки ... немного сложнее, чем двойной щелчок), похоже, это зависимости, вызванные упаковкой.
Раньше я предпочитал эту библиотеку, но она больше не поддерживается в PyPi официально. С тех пор я перешел на MySQLdb.
@Arms: больше официально не поддерживается PyPi? У вас есть какой-нибудь источник для этого?
Я перешел на этот модуль для поддержки часового пояса
Вам для этого нужен регистр? : /
Вам не нужно регистрироваться. Я считаю, что немного ниже на странице есть ссылка «Нет, спасибо, просто начни загрузку». @ J0hnG4lt
pip install mysql-connector-python тоже подойдет. Я не вижу, где написано, что PyPi больше не поддерживается? Отлично, если у вас нет доступа к компиляторам gcc / C в вашей системе, и поэтому вы не можете установить mysqldb.
Супер простая установка, отлично работает. Устанавливается с помощью: sudo pip install --egg mysql-connector-python-rf
Как уже упоминалось, pip также работает. Если по какой-то причине pip отказывается устанавливать его через pip install mysql-connector-python, проверьте верхний ответ здесь (т.е. получите его прямо из CDN MySQL).
Вы также можете установить его через pip прямо из zip-файлов выпусков, подобных этому pip install https://github.com/mysql/mysql-connector-python/archive/2.2.1-m2.zip. Список выпусков можно найти здесь github.com/mysql/mysql-connector-python/releases
по состоянию на 7 ноября 2016 года пакет для pip представляет собой просто mysql-connector, pip search mysql-connector, чтобы найти имя пакета. ответ отсюда: stackoverflow.com/a/22829966/2048266
Также обратите внимание на Гроза. Это простой инструмент сопоставления 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. Там написано, что такого модуля нет. Есть идеи, почему это так?
Непонятно, какой ответ вы имеете в виду, когда говорите «ответ выше». Пожалуйста, сделайте свой ответ законченным. Если вы хотите сослаться на другие ответы, пожалуйста, дайте ссылку на конкретный ответ.
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, они все равно так же полезны
Нет, я не думаю, что он вообще силен. Учитывая возможность использования MySQLDb или PyMysql, я думаю, что выбор PyMysql не составляет труда, потому что это простая установка pip без зависимостей, в то время как MySQLDb требует, чтобы файлы заголовков разработки mysql были установлены для вашей платформы ОС, чтобы она работала. Sqlalchemy не учитывает это, потому что ему все еще нужно обернуть модуль, который может взаимодействовать с mysql, например PyMysql, MySQLDb, CyMySQL и т. д. Крошка выглядит интересно, я проверю это
@ cricket_007 peewee и sqlalchemly не реализуют свой собственный коннектор db, они предоставляют уровень выше MySQLdb и т. д.
Я получаю эту ошибку при попытке подключиться к AWS RDS mariadb с помощью pymysql. OperationalError: (1045, "Access denied for user 'admin'@'pool-96-107-103.bstnma.fios.verizon.net' (using password: YES)")
@MurtazaHaji, вы получите эту ошибку с любым клиентом mysql, если введете неправильные учетные данные. Проверьте свои учетные данные.
Несмотря на все приведенные выше ответы, если вы не хотите заранее подключаться к определенной базе данных, например, если вы хотите создать базу данных (!), Вы можете использовать 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...
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
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()
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
Вопрос был слишком широким, но этот ответ кажется слишком узким (по крайней мере, в том смысле, что установка и импорт модуля в одиночку не годятся). Также кажется, что оболочка и питон смешаны в одном блоке кода без каких-либо объяснений или намеков относительно того, что куда идет и что делает.
таким образом вы можете подключить свой код 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
установить соединитель с помощью pip
pip install mysql-connector-python
или вы можете скачать установщик с https://dev.mysql.com/downloads/connector/python/
Используйте connect() метод mysql connector python для подключения к MySQL. Передайте требуемый аргумент методу connect(). т.е. хост, имя пользователя, пароль и имя базы данных.
Создайте объект cursor из объекта подключения, возвращенного методом connect(), для выполнения запросов SQL.
закройте соединение после того, как ваша работа будет завершена.
Пример:
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()
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 намного быстрее, чем 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/…
Некоторые ребята уже ответили на ваш вопрос там. Вы просто забыли запустить mydb.commit() после вставки значений в таблицу
Даже если некоторые из вас могут отметить это как дубликат и расстроиться, что я копирую чей-то ответ, я бы хотел, чтобы В САМОМ ДЕЛЕ выделил один из аспектов ответа г-на Напика. Из-за того, что я пропустил это, я вызвал простои веб-сайта по всей стране (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 calldatabase.commit()every time you update the database. Also you can prevent some errors I have mentioned in another question.
Другой вариант, если вы просто хотите построить некоторые данные из базы данных, - использовать Jupyter ядро, он разработан для MariaDB, но он также должен легко работать с MySQL.
Большинство ответов здесь сосредоточены на установке библиотеки MySQLdb, я бы действительно предложил выбрать MySQL Connector / Python, предоставляемый MySQL / Oracle, что значительно упрощает процесс: stackoverflow.com/questions/372885/…