Die meisten Antworten hier konzentrieren sich auf die Installation der MySQLdb-Bibliothek. Ich würde wirklich empfehlen, sich für MySQL Connector / Python von MySQL / Oracle zu entscheiden, was den Prozess viel einfacher macht: stackoverflow.com/questions/372885/…
Mr. Napik
8
Das Problem bei der Verwendung von Oracle Connector / Python besteht darin, dass es subtile Fehler und andere Integrationsprobleme gibt. Es ist einfach zu installieren, aber es ist fast unmöglich, für alle realen Anwendungsfälle, für die ich es ausprobiert habe, an die Arbeit zu gehen. Deshalb empfehle ich immer MySQLdb.
Joe C.
7
@ Mr.Napik Ich benutze, pymysqlweil es nach diesem Vergleich reines freies Python ist .
Cees Timmerman
Antworten:
1246
Herstellen einer Verbindung zu MYSQL mit Python 2 in drei Schritten
1 - Einstellung
Sie müssen einen MySQL-Treiber installieren, bevor Sie etwas tun können. Im Gegensatz zu PHP wird in Python standardmäßig nur der SQLite-Treiber installiert. Das am häufigsten verwendete Paket ist MySQLdb, aber es ist schwierig, es mit easy_install zu installieren. Bitte beachten Sie, dass MySQLdb nur Python 2 unterstützt.
Für Linux ist dies ein Gelegenheitspaket (python-mysqldb). (Sie können sudo apt-get install python-mysqldb(für Debian-basierte Distributionen), yum install MySQL-python(für RPM -basierte dnf install python-mysqlDistributionen) oder (für moderne Fedora-Distributionen) in der Befehlszeile zum Herunterladen verwenden.)
Starten Sie nach der Installation neu. Dies ist nicht obligatorisch, verhindert jedoch, dass ich 3 oder 4 andere Fragen in diesem Beitrag beantworte, wenn etwas schief geht. Also bitte neu starten.
Dann ist es wie bei jedem anderen Paket:
#!/usr/bin/pythonimportMySQLdb
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 rowsfor 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 sich die Dokumentation ansehen. Ein guter Ausgangspunkt .
3 - Erweiterte Verwendung
Sobald Sie wissen, wie es funktioniert, können Sie ein ORM verwenden , um das manuelle Schreiben von SQL zu vermeiden und Ihre Tabellen so zu bearbeiten, als wären sie Python-Objekte. Das bekannteste ORM in der Python-Community ist SQLAlchemy .
Ich rate Ihnen dringend, es zu verwenden: Ihr Leben wird viel einfacher.
Ich habe kürzlich ein weiteres Juwel in der Python-Welt entdeckt: Peewee . Es ist ein sehr leichtes ORM, sehr einfach und schnell einzurichten und dann zu verwenden. Es ist mein Tag für kleine Projekte oder eigenständige Apps, bei denen die Verwendung großer Tools wie SQLAlchemy oder Django übertrieben ist:
import peewee
from peewee import*
db =MySQLDatabase('jonhydb', user='john', passwd='megajonhy')classBook(peewee.Model):
author = peewee.CharField()
title = peewee.TextField()classMeta:
database = db
Book.create_table()
book =Book(author="me", title='Peewee is cool')
book.save()for book inBook.filter(author="me"):print book.title
Dieses Beispiel funktioniert sofort. Es ist nichts anderes als peewee ( pip install peewee) erforderlich.
Ich bin froh, dass du Peewee magst !! Ich habe Unterstützung für MySQL sowie einige Dokumentationen zur Integration hinzugefügt . Viel Spaß beim Hacken!
Coleifer
14
Beachten Sie, dass MySQLdb zum Zeitpunkt des Schreibens Python 3 nicht unterstützt. Auf der SourceForge-Seite steht "Python 3-Unterstützung kommt bald", sie wurde jedoch seit dem 08.10.2012 nicht aktualisiert. Für Python 3 gibt es PyMySQL und unsere SQL .
Paul
8
Beachten Sie auch, dass Folgendes erforderlich ist:pip install MySQL-python
Ben Crowhurst
5
Diese Antwort wäre hilfreicher bei einer Beispielverbindung zu einem externen Server an einem nicht standardmäßigen Port, um zu zeigen, wie dies funktioniert. Zu sagen, localhost sei der übliche Weg, dies zu tun, ist Unsinn.
Anthony
3
Peewee hat das Standardverhalten geändert und verwendet standardmäßig kein Autocommit mehr. Auch die DB-Treibersituation hat sich jetzt geändert. Die Frage muss aktualisiert werden, aber da einige meiner Antworten nicht bearbeitet wurden, bearbeite ich sie nicht mehr.
#!/usr/bin/pythonimportMySQLdb# 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 timefor x in range(0, numrows):
row = cursor.fetchone()print row[0],"-->", row[1]# Close the connection
db.close()
Muss in diesem Beispiel ein Commit durchgeführt werden, da Sie die Datenbank nicht ändern?
Sumanth232
3
ACHTUNG - dieses Modul hat keine Zeitzonenunterstützung bei Verbindung
kommradHomer
Es funktioniert nicht auf meinem Shared Hosting. Das zu sagen No module named MySQLdb. Wie kann ich MySQL mit Python auf Shared Hosting verwenden? Irgendeine Alternative?
Bhavesh Gangani
@BhaveshGangani Sie müssen Ihren Host kontaktieren und fragen, warum Python-Bibliotheken unterstützt werden. Wenn sie pypi unterstützen, können Sie das Paket jederzeit laden, wenn Ihre Bereitstellung erfolgt.
George Stocker
1
Interessanterweise, obwohl die Dokumente sagen, dass dies nur mit Python 2 funktioniert, scheint es für mich mit Python 3 zu funktionieren
lucidbrot
122
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".
Ja, so ist es. Außerdem ist es weniger problematisch als MySQLdb und die API ist meiner Meinung nach besser. Dies sollte die Antwort sein.
Anthony
1
Die Verwendung des offiziellen MySQL-Connectors von Python ist der beste Weg, um Zeit zu gewinnen
Anas
2
@ J0hnG4lt Sie können einfach unter dem Anmeldeformular auf "Nein, danke, starten Sie einfach meinen Download" klicken (was eigentlich obligatorisch erscheint, aber nicht obligatorisch ist).
ComFreek
6
@ ComFreek großartig. Wie ist das besser Können wir die Anwendung des "Windows-Workflows" beenden? Paketverwaltung existiert.
J0hnG4lt
120
Wenn Sie MySQLdb nicht benötigen, aber eine Bibliothek akzeptieren würden, würde ich MySQL Connector / Python von MySQL sehr, sehr empfehlen: http://dev.mysql.com/downloads/connector/python/ .
Es ist ein Paket (ca. 110 KB), reines Python, daher systemunabhängig und kinderleicht zu installieren. Sie müssen nur herunterladen, doppelklicken, die Lizenzvereinbarung bestätigen und loslegen. Xcode, MacPorts, Kompilieren, Neustarten sind nicht erforderlich.
Dann verbinden Sie sich 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()
Nicht ganz so einfach, wie Sie behaupten. Als ich versuchte, die Drehzahl zu installieren, bekam ich einige Abhängigkeitsprobleme (FileDigests und PayloadIsXz) von meinem 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
tatlar
2
Früher habe ich diese Bibliothek bevorzugt, aber sie wird auf PyPi nicht mehr offiziell unterstützt. Ich bin seitdem zu MySQLdb gewechselt.
Steven Mercatante
2
@Arms: wird auf PyPi nicht mehr offiziell unterstützt? Haben Sie eine Quelle dafür?
Messa
7
pip install mysql-connector-pythonwird auch funktionieren. Ich sehe nicht, wo es heißt, nicht mehr auf PyPi unterstützt? Großartig, wenn Sie keinen Zugriff auf die gcc / C-Compiler auf Ihrem System haben und daher nicht installieren können mysqldb.
devaliert
7
Ab dem 7. November 2016 ist das Paket für pip nur noch ein MySQL-Konnektor, pip search mysql-connectorum den Paketnamen zu finden. Antwort von hier: stackoverflow.com/a/22829966/2048266
Nommer
117
Beenden Sie die Verwendung von MySQLDb, wenn Sie die Installation von MySQL-Headern vermeiden möchten, nur um von Python aus auf MySQL zuzugreifen.
Verwenden Sie pymysql . Es macht alles, was MySQLDb macht, aber es wurde rein in Python ohne externe Abhängigkeiten implementiert . Dies macht den Installationsprozess auf allen Betriebssystemen konsistent und einfach. pymysqlist ein Rückgang des Ersatzes für MySQLDb und IMHO gibt es keinen Grund, MySQLDb jemals für irgendetwas zu verwenden ... NIE! - PTSD from installing MySQLDb on Mac OSX and *Nix systems, aber das bin nur ich.
Installation
pip install pymysql
Das war's ... du bist bereit zu spielen.
Beispiel für die 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,('[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()
AUCH - Ersetzen Sie MySQLdb in vorhandenem Code schnell und transparent
Wenn Sie bereits Code haben, der MySQLdb verwendet, können Sie ihn mit diesem einfachen Verfahren einfach durch pymysql ersetzen:
# import MySQLdb << Remove this line and replace with:import pymysql
pymysql.install_as_MySQLdb()
Alle nachfolgenden Verweise auf MySQLdb verwenden pymysql transparent.
"Immer" ist ein bisschen stark ... Was ist los mit Peewee oder Sqlalchemy? Auch wenn sie als ORM-Bibliotheken existieren, sind sie genauso nützlich
OneCricketeer
4
Nein, ich glaube nicht, dass es überhaupt stark ist. Angesichts der Option, entweder MySQLDb oder PyMysql zu verwenden, ist die Auswahl von PyMysql meiner Meinung nach ein Kinderspiel, da es sich um eine einfache Pip-Installation ohne Abhängigkeiten handelt, während für MySQLDb MySQL-Entwicklungsheaderdateien installiert sein müssen, damit Ihre Betriebssystemplattform funktioniert. Sqlalchemy berücksichtigt dies nicht, da es immer noch ein Modul umschließen muss, das mit MySQL wie PyMysql, MySQLDb, CyMySQL usw. kommunizieren kann. Peewee sieht jedoch interessant aus, ich werde das überprüfen
OkezieE
2
@ Cricket_007 Peewee und Sqlalchemly implementieren keinen eigenen DB-Connector, sie bieten eine Ebene über MySQLdb usw.
Rocksportrocker
25
Versuchen Sie es mit MySQLdb . MySQLdb unterstützt nur Python 2.
ACHTUNG - dieses Modul hat keine Zeitzonenunterstützung bei Verbindung
kommradHomer
1
@kommradHomer Kannst du das bitte näher erläutern?
Pyderman
1
@kommradHomer - Was bedeutet Zeitzonenunterstützung für Sie (oder andere - insbesondere beim Herstellen einer Verbindung localhost)?
Warren
1
@ Warren Nein, ich habe localhost in meinem Fall nicht verbunden
kommradHomer
1
Wie erkenne ich, welche Bibliothek für die Verbindung mit einer Datenbank installiert ist?
Posfan12
18
Als DB- Treiber gibt es auch unsere SQL . Einige der Gründe, die auf diesem Link aufgeführt sind, sagen aus, warum unsere SQL besser ist:
Unsere SQL verfügt über eine echte Parametrisierung, bei der SQL und Daten vollständig separat an MySQL gesendet werden.
Mit ourql können Text- oder Binärdaten in die Datenbank gestreamt und aus der Datenbank gestreamt werden, anstatt dass alles im Client gepuffert werden muss.
Unser SQL kann sowohl Zeilen träge einfügen als auch Zeilen träge abrufen.
Unsere SQL unterstützt standardmäßig Unicode.
Unser SQL unterstützt Python 2.4 bis 2.7 ohne Verfallswarnungen auf 2.6+ (siehe PEP 218) und ohne auf 2.7 vollständig zu versagen (siehe PEP 328).
ourql läuft nativ auf Python 3.x.
Wie kann man mit unserer SQL eine Verbindung zu MySQL herstellen?
Sehr ähnlich zu 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]
Ich verstehe das 'läuft nativ auf Python 3.x' nicht. Ich habe gerade versucht, es zu installieren, und die Datei setup.py wird herausgebombt, da nicht einmal Python 3-kompatible Druckaufrufe verwendet werden. Es klang großartig, bis ich es tatsächlich versuchte.
Otakucode
15
Führen Sie diesen Befehl in Ihrem Terminal aus, um den MySQL-Connector zu installieren:
pip install mysql-connector-python
Führen Sie dies in Ihrem Python-Editor aus, um eine Verbindung zu MySQL herzustellen:
Einige Leute haben dort bereits Ihre Frage beantwortet. Sie haben nur vergessen zu laufen, mydb.commit()nachdem Sie Werte in die Tabelle
eingefügt haben
13
SqlAlchemy
SQLAlchemy ist das Python SQL-Toolkit und Object Relational Mapper, das Anwendungsentwicklern die volle Leistung und Flexibilität von SQL bietet. SQLAlchemy bietet eine vollständige Suite bekannter Persistenzmuster auf Unternehmensebene, die für einen effizienten und leistungsstarken Datenbankzugriff entwickelt wurden und in eine einfache und pythonische Domänensprache umgewandelt wurden.
Installation
pip install sqlalchemy
RAW-Abfrage
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()
ORM Weg
from sqlalchemy importColumn,Integer,Stringfrom 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 instanceBase.metadata.bind = engine
classPerson(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()
Trotz aller oben genannten Antworten können Sie connection.select_db(database), wie Sie im Folgenden zeigen möchten, eine Verbindung zu einer bestimmten Datenbank herstellen, z. B. wenn Sie die Datenbank noch (!) Erstellen möchten .
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()
MySQLdb ist der einfache Weg. Sie können SQL-Abfragen über eine Verbindung ausführen. Zeitraum.
Mein bevorzugter Weg, der auch pythonisch ist, ist die Verwendung der mächtigen SQLAlchemy . Hier finden Sie ein Tutorial zum Thema Abfrage und ein Tutorial zu den ORM-Funktionen von SQLALchemy.
Die Links sind tot. Können Sie sich das ansehen und es mit dem richtigen Link aktualisieren?
Naveen Vijay
6
Für Python3.6 habe ich zwei Treiber gefunden: pymysql und mysqlclient. Ich habe die Leistung zwischen ihnen getestet und das Ergebnis erhalten: Der mysqlclient ist schneller.
Unten ist mein Testprozess (ich muss Python Lib Profilehooks installieren, um den Zeitablauf zu analysieren:
rohes SQL: select * from FOO;
sofort im MySQL-Terminal ausführen:
46410 rows in set (0.10 sec)
Pymysql (2,4 s):
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()
Hier ist das Pymysql-Profil:
mysqlclient (0,4s)
from profilehooks import profile
importMySQLdb
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()
Hier ist das mysqlclient-Profil:
Es scheint also, dass mysqlclient viel schneller ist als pymysql
Auch wenn einige von euch dies als Duplikat markieren kann und aufregen , dass ich die Antwort von kopiere jemand anderes, würde ich WIRKLICH wie ein Aspekt von Herrn Napik Antwort zu markieren. Da ich dies verpasst habe, habe ich eine landesweite Ausfallzeit der Website (9 Minuten) verursacht. Wenn nur jemand diese Informationen geteilt hätte, hätte ich sie verhindern können!
Hier ist sein Code:
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()
Das Wichtigste hier ist die Try and finally- Klausel. Dadurch können Verbindungen zu IMMER geschlossen werden, unabhängig davon, was im Cursor- / SQL-Anweisungsteil des Codes geschieht. Viele aktive Verbindungen führen zu einem Anstieg der DBLoadNoCPU und können einen Datenbankserver zum Absturz bringen.
Ich hoffe, diese Warnung hilft, Server und letztendlich Jobs zu retten! : D.
Die beste Möglichkeit, von Python aus eine Verbindung zu MySQL herzustellen, ist die Verwendung von MySQL Connector / Python, da es der offizielle Oracle-Treiber für MySQL für die Arbeit mit Python ist und sowohl mit Python 3 als auch mit Python 2 funktioniert.
Befolgen Sie die unten genannten Schritte, um MySQL zu verbinden
Verwenden Sie die connect()Methode von MySQL Connector Python, um eine Verbindung zu MySQL herzustellen. Übergeben Sie das erforderliche Argument an die connect()Methode. dh Host, Benutzername, Passwort und Datenbankname.
Erstellen Sie ein cursorObjekt aus einem von der connect()Methode zurückgegebenen Verbindungsobjekt, um SQL-Abfragen auszuführen.
Schließen Sie die Verbindung, nachdem Ihre Arbeit abgeschlossen ist.
Beispiel :
import mysql.connector
from mysql.connector importErrortry:
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)exceptErroras e :print("Print your error msg", e)finally:#closing database connection.if(conn.is_connected()):
cursor.close()
conn.close()
Für DML-Operationen - Verwenden Sie cursor.execute()und cursor.executemany(), um eine Abfrage auszuführen. und danach verwenden Sie, connection.commit()um Ihre Änderungen an der Datenbank beizubehalten
Zu holen Daten - Verwenden Sie cursor.execute()laufen Abfrage und cursor.fetchall(), cursor.fetchone(), cursor.fetchmany(SIZE)zu holen Daten
Ich habe MySQL-Python über yum install installiert. Die Installation war abgeschlossen, aber ich kann das MySQLdb-Modul nicht importieren. Es heißt kein solches Modul. Irgendeine Idee, warum es so ist?
user3527975
Es ist nicht klar, welche Antwort Sie meinen, wenn Sie "obige Antwort" sagen. Bitte machen Sie Ihre Antwort vollständig. Wenn Sie auf andere Antworten verweisen möchten, verlinken Sie bitte auf die spezifische Antwort.
Flimm
5
mysqlclient ist das Beste, da andere nur bestimmte Versionen von Python unterstützen
pip install mysqlclient
Beispielcode
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())
1 die schnellste Lösung für Python vorzuschlagen 3. jedoch mysql.connectorund _mysqlgibt sowohl einen Importfehler (wenn auch die zweite Option entsprechend die Dokumentation funktionieren soll). import MySQLdbfunktioniert, und dannMySQLdb.connect...
Suzana
3
Schauen Sie sich auch Storm an . Es ist ein einfaches SQL-Mapping-Tool, mit dem Sie SQL-Einträge einfach bearbeiten und erstellen können, ohne die Abfragen schreiben zu müssen.
Hier ist ein einfaches Beispiel:
from storm.locals import*# User will be the mapped object; you have to create the table before mapping itclassUser(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_INCREMENTprint str(user.ID)# 1 (ID)
store.commit()# commit all changes to the database
So finden und verwenden Sie Objekte:
michael = store.find(User,User.name == u"Michael").one()print str(user.ID)# 10
#!/usr/bin/pythonimportMySQLdbtry:
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 databasefor each_row in cur.fetchall():print each_row
# Close the connection
db.close()exceptException, e:print'Error ', e
Die Frage war etwas zu weit gefasst, aber diese Antwort scheint etwas zu eng zu sein (zumindest in dem Sinne, dass das Installieren und Importieren eines Moduls allein nicht ausreicht). Es scheint auch Shell und Python zu geben, die in einem einzelnen Codeblock ohne Erklärung oder Hinweise vermischt sind, was wohin geht und was tut.
pymysql
weil es nach diesem Vergleich reines freies Python ist .Antworten:
Herstellen einer Verbindung zu MYSQL mit Python 2 in drei Schritten
1 - Einstellung
Sie müssen einen MySQL-Treiber installieren, bevor Sie etwas tun können. Im Gegensatz zu PHP wird in Python standardmäßig nur der SQLite-Treiber installiert. Das am häufigsten verwendete Paket 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 erhalten .
Für Linux ist dies ein Gelegenheitspaket (python-mysqldb). (Sie können
sudo apt-get install python-mysqldb
(für Debian-basierte Distributionen),yum install MySQL-python
(für RPM -basiertednf install python-mysql
Distributionen) oder (für moderne Fedora-Distributionen) in der Befehlszeile zum Herunterladen verwenden.)Für Mac können Sie MySQLdb mit Macport installieren .
2 - Verwendung
Starten Sie nach der Installation neu. Dies ist nicht obligatorisch, verhindert jedoch, dass ich 3 oder 4 andere Fragen in diesem Beitrag beantworte, wenn etwas schief geht. Also bitte neu starten.
Dann ist es wie bei jedem anderen Paket:
Natürlich gibt es Tausende von Möglichkeiten und Optionen; Dies ist ein sehr einfaches Beispiel. Sie müssen sich die Dokumentation ansehen. Ein guter Ausgangspunkt .
3 - Erweiterte Verwendung
Sobald Sie wissen, wie es funktioniert, können Sie ein ORM verwenden , um das manuelle Schreiben von SQL zu vermeiden und Ihre Tabellen so zu bearbeiten, als wären sie Python-Objekte. Das bekannteste ORM in der Python-Community ist SQLAlchemy .
Ich rate Ihnen dringend, es zu verwenden: Ihr Leben wird viel einfacher.
Ich habe kürzlich ein weiteres Juwel in der Python-Welt entdeckt: Peewee . Es ist ein sehr leichtes ORM, sehr einfach und schnell einzurichten und dann zu verwenden. Es ist mein Tag für kleine Projekte oder eigenständige Apps, bei denen die Verwendung großer Tools wie SQLAlchemy oder Django übertrieben ist:
Dieses Beispiel funktioniert sofort. Es ist nichts anderes als peewee (
pip install peewee
) erforderlich.quelle
pip install MySQL-python
Hier ist eine Möglichkeit, MySQLdb zu verwenden , das nur Python 2 unterstützt:
Referenz hier
quelle
No module named MySQLdb
. Wie kann ich MySQL mit Python auf Shared Hosting verwenden? Irgendeine Alternative?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/
quelle
Wenn Sie MySQLdb nicht benötigen, aber eine Bibliothek akzeptieren würden, würde ich MySQL Connector / Python von MySQL sehr, sehr empfehlen: http://dev.mysql.com/downloads/connector/python/ .
Es ist ein Paket (ca. 110 KB), reines Python, daher systemunabhängig und kinderleicht zu installieren. Sie müssen nur herunterladen, doppelklicken, die Lizenzvereinbarung bestätigen und loslegen. Xcode, MacPorts, Kompilieren, Neustarten sind nicht erforderlich.
Dann verbinden Sie sich wie:
quelle
rpm -i mysql-connector-python-1.1.5-1.el6.noarch.rpm
error: Failed dependencies:
rpmlib(FileDigests) <= 4.6.0-1 is needed by mysql-connector-python-1.1.5-1.el6.noarch
rpmlib(PayloadIsXz) <= 5.2-1 is needed by mysql-connector-python-1.1.5-1.el6.noarch
pip install mysql-connector-python
wird auch funktionieren. Ich sehe nicht, wo es heißt, nicht mehr auf PyPi unterstützt? Großartig, wenn Sie keinen Zugriff auf die gcc / C-Compiler auf Ihrem System haben und daher nicht installieren könnenmysqldb
.pip search mysql-connector
um den Paketnamen zu finden. Antwort von hier: stackoverflow.com/a/22829966/2048266Verwenden Sie pymysql . Es macht alles, was MySQLDb macht, aber es wurde rein in Python ohne externe Abhängigkeiten implementiert . Dies macht den Installationsprozess auf allen Betriebssystemen konsistent und einfach.
pymysql
ist ein Rückgang des Ersatzes für MySQLDb und IMHO gibt es keinen Grund, MySQLDb jemals für irgendetwas zu verwenden ... NIE! -PTSD from installing MySQLDb on Mac OSX and *Nix systems
, aber das bin nur ich.Installation
pip install pymysql
Beispiel für die Verwendung von pymysql Github repo
Wenn Sie bereits Code haben, der MySQLdb verwendet, können Sie ihn mit diesem einfachen Verfahren einfach durch pymysql ersetzen:
Alle nachfolgenden Verweise auf MySQLdb verwenden pymysql transparent.
quelle
Versuchen Sie es mit MySQLdb . MySQLdb unterstützt nur Python 2.
Hier finden Sie eine Anleitung: http://www.kitebird.com/articles/pydbapi.html
Von der Seite:
quelle
localhost
)?Als DB- Treiber gibt es auch unsere SQL . Einige der Gründe, die auf diesem Link aufgeführt sind, sagen aus, warum unsere SQL besser ist:
Wie kann man mit unserer SQL eine Verbindung zu MySQL herstellen?
Sehr ähnlich zu mysqldb:
Das Tutorial in der Dokumentation ist ziemlich anständig.
Und natürlich ist SQLAlchemy für ORM eine gute Wahl, wie bereits in den anderen Antworten erwähnt.
quelle
Führen Sie diesen Befehl in Ihrem Terminal aus, um den MySQL-Connector zu installieren:
Führen Sie dies in Ihrem Python-Editor aus, um eine Verbindung zu MySQL herzustellen:
Beispiele zum Ausführen von MySQL-Befehlen (in Ihrem Python-Edior):
Für weitere Befehle: https://www.w3schools.com/python/python_mysql_getstarted.asp
quelle
mysql-connector
nur auf. stackoverflow.com/questions/59405740/…mydb.commit()
nachdem Sie Werte in die TabelleSqlAlchemy
Installation
RAW-Abfrage
ORM Weg
quelle
Trotz aller oben genannten Antworten können Sie
connection.select_db(database)
, wie Sie im Folgenden zeigen möchten, eine Verbindung zu einer bestimmten Datenbank herstellen, z. B. wenn Sie die Datenbank noch (!) Erstellen möchten .quelle
MySQLdb ist der einfache Weg. Sie können SQL-Abfragen über eine Verbindung ausführen. Zeitraum.
Mein bevorzugter Weg, der auch pythonisch ist, ist die Verwendung der mächtigen SQLAlchemy . Hier finden Sie ein Tutorial zum Thema Abfrage und ein Tutorial zu den ORM-Funktionen von SQLALchemy.
quelle
Für Python3.6 habe ich zwei Treiber gefunden: pymysql und mysqlclient. Ich habe die Leistung zwischen ihnen getestet und das Ergebnis erhalten: Der mysqlclient ist schneller.
Unten ist mein Testprozess (ich muss Python Lib Profilehooks installieren, um den Zeitablauf zu analysieren:
rohes SQL:
select * from FOO;
sofort im MySQL-Terminal ausführen:
46410 rows in set (0.10 sec)
Pymysql (2,4 s):
Hier ist das Pymysql-Profil:
mysqlclient (0,4s)
Hier ist das mysqlclient-Profil:
Es scheint also, dass mysqlclient viel schneller ist als pymysql
quelle
Auch wenn einige von euch dies als Duplikat markieren kann und aufregen , dass ich die Antwort von kopiere jemand anderes, würde ich WIRKLICH wie ein Aspekt von Herrn Napik Antwort zu markieren. Da ich dies verpasst habe, habe ich eine landesweite Ausfallzeit der Website (9 Minuten) verursacht. Wenn nur jemand diese Informationen geteilt hätte, hätte ich sie verhindern können!
Hier ist sein Code:
Das Wichtigste hier ist die Try and finally- Klausel. Dadurch können Verbindungen zu IMMER geschlossen werden, unabhängig davon, was im Cursor- / SQL-Anweisungsteil des Codes geschieht. Viele aktive Verbindungen führen zu einem Anstieg der DBLoadNoCPU und können einen Datenbankserver zum Absturz bringen.
Ich hoffe, diese Warnung hilft, Server und letztendlich Jobs zu retten! : D.
quelle
Die beste Möglichkeit, von Python aus eine Verbindung zu MySQL herzustellen, ist die Verwendung von MySQL Connector / Python, da es der offizielle Oracle-Treiber für MySQL für die Arbeit mit Python ist und sowohl mit Python 3 als auch mit Python 2 funktioniert.
Befolgen Sie die unten genannten Schritte, um MySQL zu verbinden
Installieren Sie den Stecker mit pip
pip install mysql-connector-python
oder Sie können das Installationsprogramm von https://dev.mysql.com/downloads/connector/python/ herunterladen.
Verwenden Sie die
connect()
Methode von MySQL Connector Python, um eine Verbindung zu MySQL herzustellen. Übergeben Sie das erforderliche Argument an dieconnect()
Methode. dh Host, Benutzername, Passwort und Datenbankname.Erstellen Sie ein
cursor
Objekt aus einem von derconnect()
Methode zurückgegebenen Verbindungsobjekt, um SQL-Abfragen auszuführen.Schließen Sie die Verbindung, nachdem Ihre Arbeit abgeschlossen ist.
Beispiel :
Referenz - https://pynative.com/python-mysql-database-connection/
Wichtige API von MySQL Connector Python
Für DML-Operationen - Verwenden Sie
cursor.execute()
undcursor.executemany()
, um eine Abfrage auszuführen. und danach verwenden Sie,connection.commit()
um Ihre Änderungen an der Datenbank beizubehaltenZu holen Daten - Verwenden Sie
cursor.execute()
laufen Abfrage undcursor.fetchall()
,cursor.fetchone()
,cursor.fetchmany(SIZE)
zu holen Datenquelle
Nur eine Änderung in der obigen Antwort. Führen Sie einfach diesen Befehl aus, um MySQL für Python zu installieren
merken! Es wird zwischen Groß- und Kleinschreibung unterschieden.
quelle
mysqlclient ist das Beste, da andere nur bestimmte Versionen von Python unterstützen
Beispielcode
Siehe https://github.com/PyMySQL/mysqlclient-python
quelle
mysql.connector
und_mysql
gibt sowohl einen Importfehler (wenn auch die zweite Option entsprechend die Dokumentation funktionieren soll).import MySQLdb
funktioniert, und dannMySQLdb.connect...
Schauen Sie sich auch Storm an . Es ist ein einfaches SQL-Mapping-Tool, mit dem Sie SQL-Einträge einfach bearbeiten und erstellen können, ohne die Abfragen schreiben zu müssen.
Hier ist ein einfaches Beispiel:
So finden und verwenden Sie Objekte:
Mit Primärschlüssel suchen:
Weitere Informationen finden Sie im Tutorial .
quelle
Dies ist eine MySQL-DB-Verbindung
quelle
Installieren Sie zuerst den Treiber
Dann lautet ein Basiscode wie folgt:
quelle
Auf diese Weise können Sie Ihren Python-Code mit MySQL verbinden.
quelle
Installieren Sie zuerst den Treiber (Ubuntu)
sudo apt-get installiere python-pip
sudo pip install -U pip
sudo apt-get install python-dev libmysqlclient-dev
sudo apt-get installiere MySQL-Python
MySQL-Datenbankverbindungscodes
quelle
Für Python 3.3
CyMySQL https://github.com/nakagami/CyMySQL
Ich habe pip auf meinem Windows 7 installiert, nur pip install cymysql
(Sie brauchen kein Cython) schnell und schmerzlos
quelle
Installieren Sie zunächst den Python-MySQL-Connector unter https://dev.mysql.com/downloads/connector/python/.
Geben Sie auf der Python-Konsole Folgendes ein:
quelle