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


Wie stelle ich mit einem Python-Programm eine Verbindung zu einer MySQL-Datenbank her?


972
2017-12-16 21:49


Ursprung


Antworten:


Verbindung mit MYSQL mit Python in 3 Schritten

1 - Einstellung

Sie müssen einen MySQL-Treiber installieren, bevor Sie etwas tun. Im Gegensatz zu PHP wird nur der SQLite-Treiber standardmäßig mit Python installiert. Das am häufigsten verwendete Paket ist dies MySQLdb aber es ist schwer es mit easy_install zu installieren.

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-Distribution) in der Befehlszeile zum Herunterladen.)

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

2 - Verwendung

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

Dann ist es wie mit 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 tausend Möglichkeiten und Möglichkeiten; Dies ist ein sehr einfaches Beispiel. Sie müssen sich die Dokumentation ansehen. Ein guter Ausgangspunkt.

3 - Fortgeschrittene Verwendung

Sobald Sie wissen, wie es funktioniert, möchten Sie möglicherweise ein verwenden ORM um zu vermeiden, SQL manuell zu schreiben und Ihre Tabellen so zu manipulieren, wie sie Python-Objekte waren. Das bekannteste ORM in der Python-Community ist SQLAlchemy.

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

Ich habe kürzlich ein weiteres Juwel in der Python-Welt entdeckt: Sch ****. Es ist ein sehr lite ORM, wirklich einfach und schnell einzurichten und dann zu verwenden. Es macht meinen Tag für kleine Projekte oder Stand-Alone-Apps, wo die Verwendung großer Tools wie SQLAlchemy oder Django Overkill ist:

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 sofort. Nichts anderes als peewee (pip install peewee) Wird benötigt.


1128
2017-12-16 21:51



Hier ist ein Weg, es zu tun:

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

Referenz hier


158
2018-05-28 15:39



Oracle (MySQL) unterstützt jetzt einen reinen Python-Connector. Das bedeutet, dass keine Binärdateien installiert werden müssen: es ist nur eine Python-Bibliothek. Es heißt "Connector / Python".

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


105
2018-01-06 21:32



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

Es ist ein Paket (etwa 110k), reines Python, also ist es systemunabhängig und einfach zu installieren. Sie müssen nur herunterladen, doppelklicken, Lizenzvereinbarung bestätigen und loslegen. Es besteht keine Notwendigkeit für Xcode, MacPorts, Kompilieren, Neustarten ...

Dann verbinden Sie sich wie folgt:

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

95
2017-12-29 02:52



Beenden Sie die Verwendung von MySQLDb, wenn Sie die Installation von mysql-Headern vermeiden möchten, um nur von python auf mysql zugreifen zu können.

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

Installation

pip install pymysql

Das ist es ... du bist bereit zu spielen.

Beispiel Verwendung von 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()

ALSO - Ersetzen Sie MySQLdb im vorhandenen Code schnell und transparent

Wenn Sie über vorhandenen Code verfügen, der MySQLdb verwendet, können Sie ihn einfach mit pymysql ersetzen, indem Sie diesen einfachen Prozess verwenden:

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

Alle nachfolgenden Verweise auf MySQLdb verwenden pymysql transparent.


85
2017-10-15 21:25



Als db-Treiber gibt es das auch unser. Einige der Gründe, die auf diesem Link aufgeführt sind, sagen, warum ourql besser ist:

  • oursql hat eine echte Parametrisierung und sendet die SQL und Daten komplett getrennt an MySQL.
  • Mit oursql können Text- oder Binärdaten in die Datenbank gestreamt und aus der Datenbank gestreamt werden, anstatt dass alles im Client gepuffert werden muss.
  • oursql kann sowohl Zeilen träge einfügen als auch Zeilen faul holen.
  • oursql hat standardmäßig die Unicode-Unterstützung aktiviert.
  • oursql unterstützt Python 2.4 bis 2.7 ohne jegliche Verwarnungswarnungen auf 2.6+ (siehe PEP 218) und ohne vollständig auf 2.7 zu scheitern (siehe PEP 328).
  • oursql läuft nativ auf Python 3.x.

So, wie man mit mysql mit oursql verbindet?

Sehr ähnlich wie 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]

Das Tutorial in der Dokumentation ist ziemlich anständig.

Und natürlich ist für ORM SQLAlchemy eine gute Wahl, wie bereits in den anderen Antworten erwähnt.


18
2017-12-16 21:52



Versuchen Sie es mit MySQLdb

Es gibt ein wie man hier paginiert: http://www.kitebird.com/articles/pydbapi.html


Von der Seite:

# 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
2018-06-22 14:18