Wie kann ich mit einem Python-Programm eine Verbindung zu einer MySQL-Datenbank herstellen?
Die Links sind tot, können Sie sich das ansehen und mit dem richtigen Link aktualisieren?
Wie kann ich mit einem Python-Programm eine Verbindung zu einer MySQL-Datenbank herstellen?
Trotz der obigen Antworten können Sie für den Fall, dass Sie sich nicht im Voraus mit einer bestimmten Datenbank verbinden wollen, z. B. wenn Sie die Datenbank noch (!) erstellen wollen, Folgendes verwenden connection.select_db(database)
wie im Folgenden gezeigt wird.
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()
Auch wenn einige von Ihnen dies als Duplikat markieren und sich darüber aufregen, dass ich die Antwort eines anderen kopiere, möchte ich WIRKLICH Ich möchte einen Aspekt von Herrn Napiks Antwort hervorheben. Weil ich das übersehen habe, habe ich eine landesweite Ausfallzeit der Website verursacht (9 Minuten). Wenn nur jemand diese Information weitergegeben hätte, hätte ich dies 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 ist hier die Versuchen Sie y Endlich Klausel. Dies ermöglicht Verbindungen zu IMMER geschlossen werden, unabhängig davon, was im Cursor/Sqlstatement-Teil des Codes geschieht. Viele aktive Verbindungen führen dazu, dass DBLoadNoCPU in die Höhe schießt und einen DB-Server zum Absturz bringen kann.
Ich hoffe, dass diese Warnung dazu beiträgt, Server und letztlich Arbeitsplätze zu retten :D
MySQLdb ist der einfachste Weg. Sie können SQL-Abfragen über eine Verbindung ausführen. Punkt.
Meine bevorzugte Methode, die auch pythonisch ist, ist die Verwendung des mächtigen SQLAlchemy stattdessen. Hier ist ein abfragebezogen Tutorium, und hier ist ein Tutorium über ORM-Fähigkeiten von SQLALchemy.
Für Python3.6 habe ich zwei Treiber gefunden: pymysql und mysqlclient. Ich testete die Leistung zwischen ihnen und bekam das Ergebnis: der mysqlclient ist schneller.
Unten ist mein Testprozess (ich muss die Python-Bibliothek profilehooks installieren, um den Zeitablauf zu analysieren)
raw sql: select * from FOO;
sofort im mysql-Terminal ausführen: 46410 rows in set (0.10 sec)
pymysql (2.4s):
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()
mysqlclient (0.4s)
from profilehooks import profile
import MySQLdb
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
Ich habe MySQL-python über yum install installiert. Die Installation war vollständig, aber ich kann das MySQLdb-Modul nicht importieren. Es sagt, dass es kein solches Modul gibt. Irgendeine Idee, warum das so ist?
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 .