Wie kann ich mit einem Python-Programm eine Verbindung zu einer MySQL-Datenbank herstellen?
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!
Wie kann ich mit einem Python-Programm eine Verbindung zu einer MySQL-Datenbank herstellen?
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.
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!
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()
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()
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
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.
Die Verwendung des offiziellen mysql-Anschlusses von python ist der beste Weg, Zeit zu gewinnen
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 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.
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 .