1283 Stimmen

Wie verbinde ich mich mit einer MySQL-Datenbank in Python?

Wie kann ich mit einem Python-Programm eine Verbindung zu einer MySQL-Datenbank herstellen?

50 Stimmen

Die meisten Antworten hier konzentrieren sich auf die Installation der MySQLdb-Bibliothek. Ich würde wirklich empfehlen, sich für den von MySQL/Oracle bereitgestellten MySQL Connector/Python zu entscheiden, der den Prozess viel einfacher macht: stackoverflow.com/questions/372885/

10 Stimmen

Das Problem bei der Verwendung von Oracle's Connector/Python ist, dass es subtile Bugs und andere Integrationsprobleme gibt. Er ist einfach zu installieren, aber für alle realen Anwendungsfälle, für die ich ihn ausprobiert habe, fast unmöglich zum Laufen zu bringen. Aus diesem Grund empfehle ich immer MySQLdb.

8 Stimmen

@Mr.Napik Ich benutze pymysql weil es sich um ein reines freies Python handelt, das nach dieser Vergleich .

1305voto

e-satis Punkte 547539

Verbinden mit MYSQL mit Python 2 in drei Schritten

1 - Einstellung

Sie müssen einen MySQL-Treiber installieren, bevor Sie etwas unternehmen. Im Gegensatz zu PHP wird nur der SQLite-Treiber standardmäßig mit Python installiert. Das am häufigsten verwendete Paket dafür ist MySQLdb aber es ist schwierig, es mit easy_install zu installieren. Bitte beachten Sie, dass MySQLdb nur Python 2 unterstützt.

Für Windows-Benutzer können Sie eine exe von MySQLdb .

Für Linux ist dies ein Gelegenheitspaket (python-mysqldb). (Sie können verwenden sudo apt-get install python-mysqldb (für Debian-basierte Distributionen), yum install MySQL-python (für rpm-basiert), oder dnf install python-mysql (für moderne Fedora-Distributionen) in der Befehlszeile zum Herunterladen).

Für Mac können Sie MySQLdb mit Macport installieren .

2 - Verwendung

Nach der Installation neu starten. Dies ist nicht zwingend erforderlich, aber es wird mich daran hindern, 3 oder 4 andere Fragen in diesem Beitrag zu beantworten, wenn etwas schief geht. Also bitte neu starten.

Dann ist es genau wie bei jedem anderen Paket:

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

Natürlich gibt es tausende von Möglichkeiten und Optionen; dies ist ein sehr einfaches Beispiel. Sie müssen in der Dokumentation nachsehen. Eine gute Ausgangsbasis .

3 - Fortgeschrittene Nutzung

Sobald Sie wissen, wie es funktioniert, können Sie eine ORM um das manuelle Schreiben von SQL zu vermeiden und Ihre Tabellen wie Python-Objekte zu manipulieren. Der bekannteste ORM in der Python-Gemeinschaft ist SQLAlchemy .

Ich empfehle Ihnen dringend, es zu benutzen: Ihr Leben wird viel einfacher werden.

Vor kurzem habe ich ein weiteres Juwel in der Python-Welt entdeckt: peewee . Es ist eine sehr leichte ORM, wirklich einfach und schnell zu installieren und dann zu verwenden. Es macht meinen Tag für kleine Projekte oder Stand-alone-Anwendungen, wo mit großen Tools wie SQLAlchemy oder Django ist overkill:

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

Dieses Beispiel funktioniert ohne Probleme. Nichts anderes als die Tatsache, dass peewee ( pip install peewee ) ist erforderlich.

47 Stimmen

Schön, dass Ihnen peewee gefällt! Ich habe die Unterstützung für MySQL sowie einige Dokumentation mit ihr zu integrieren. Viel Spaß beim Hacken!

19 Stimmen

Beachten Sie, dass MySQLdb zum Zeitpunkt der Erstellung dieses Artikels Python 3 nicht unterstützt. Auf der Sourceforge-Seite steht "Python 3 support coming soon", aber sie wurde seit dem 08.10.2012 nicht mehr aktualisiert. Für Python 3 gibt es PyMySQL y unserql .

202voto

George Stocker Punkte 56164

Hier ist eine Möglichkeit, dies zu tun, indem man MySQLdb , das nur Python 2 unterstützt:

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

Bezug hier

145voto

Mr. Napik Punkte 5213

Wenn Sie MySQLdb nicht benötigen, aber eine beliebige Bibliothek akzeptieren würden, würde ich den MySQL Connector/Python von MySQL sehr, sehr empfehlen: http://dev.mysql.com/downloads/connector/python/ .

Es ist ein einziges Paket (ca. 110k), reines Python, also systemunabhängig, und kinderleicht zu installieren. Einfach herunterladen, doppelklicken, Lizenzvereinbarung bestätigen und los geht's. Es gibt keine Notwendigkeit für Xcode, MacPorts, Kompilieren, Neustart

Dann verbinden Sie wie:

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

15 Stimmen

pip install mysql-connector-python wird auch funktionieren. Ich sehe nicht, wo es sagt nicht mehr auf PyPi unterstützt? Großartig, wenn Sie keinen Zugang zu den gcc/C-Compilern auf Ihrem System haben und daher nicht installieren können mysqldb .

132voto

Ken Brown Punkte 1281

Oracle (MySQL) unterstützt jetzt einen reinen Python-Konnektor. Das bedeutet, dass keine Binärdateien installiert werden müssen: Es handelt sich lediglich um eine Python-Bibliothek. Er heißt "Connector/Python".

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

Nach der Installation können Sie einige Anwendungsbeispiele sehen ici

1 Stimmen

Ist dies schneller als die Verwendung von mysqldb?

11 Stimmen

Ja, das ist sie. Außerdem ist es weniger umständlich als MySQLdb und die API ist meiner Meinung nach besser. Das sollte die Antwort sein.

1 Stimmen

Die Verwendung des offiziellen mysql-Anschlusses von python ist der beste Weg, Zeit zu gewinnen

128voto

OkezieE Punkte 4775

Hören Sie auf, MySQLDb zu verwenden, wenn Sie die Installation von mysql-Headern vermeiden wollen, nur um von Python aus auf mysql zuzugreifen.

Utilice pymysql . Es tut alles, was MySQLDb tut, aber es wurde rein in Python implementiert mit KEINE externen Abhängigkeiten . Dies macht den Installationsprozess auf allen Betriebssystemen einheitlich und einfach. pymysql ist ein Ersatz für MySQLDb und IMHO gibt es keinen Grund, MySQLDb jemals für irgendetwas zu verwenden... JEMALS! - PTSD from installing MySQLDb on Mac OSX and *Nix systems aber das ist nur meine Meinung.

Einrichtung

pip install pymysql

Das war's... Sie sind bereit zu spielen.

Beispiel für die Verwendung von pymysql aus dem Github-Repository

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

ALSO - Schnelles und transparentes Ersetzen von MySQLdb in bestehendem Code

Wenn Sie bestehenden Code haben, der MySQLdb verwendet, können Sie ihn mit diesem einfachen Verfahren durch pymysql ersetzen:

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

Alle nachfolgenden Verweise auf MySQLdb werden pymysql transparent verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X