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

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

866
задан 17 дек. '08 в 0:49
источник поделиться
13 ответов

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

1 - Настройка

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

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

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

Для 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).

1047
ответ дан 07 марта '09 в 21:57
источник

Вот один из способов сделать это:

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

Ссылка здесь

150
ответ дан 17 дек. '08 в 0:51
источник

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

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

93
ответ дан 28 мая '13 в 18:39
источник

Если вам не нужен 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()
88
ответ дан 07 янв. '14 в 0:32
источник

Остановить использование 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, ('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()

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

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

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

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

53
ответ дан 29 дек. '16 в 5:52
источник

В качестве драйвера 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 - хороший выбор, как уже упоминалось в других ответах.

18
ответ дан 16 окт. '12 в 0:25
источник

Попробуйте использовать MySQLdb

Здесь можно найти страницу: 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 ()
17
ответ дан 17 дек. '08 в 0:52
источник

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

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

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

8
ответ дан 17 дек. '08 в 1:29
источник

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

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

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

4
ответ дан 21 сент. '15 в 7:31
источник

Также посмотрите 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: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

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

3
ответ дан 03 июня '15 в 15:20
источник

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

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 
1
ответ дан 21 авг. '17 в 21:18
источник

Для python 3.3

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

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

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

0
ответ дан 11 сент. '13 в 13:04
источник

Другие вопросы по меткам или Задайте вопрос