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 .

26voto

Hortitude Punkte 13080

Versuchen Sie es mit MySQLdb . MySQLdb unterstützt nur Python 2.

Eine Anleitung dazu finden Sie hier: 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 ()

25voto

Scott Punkte 3405

Führen Sie diesen Befehl in Ihrem Terminal aus, um den mysql-Anschluss zu installieren:

pip install mysql-connector-python

Und führen Sie dies in Ihrem Python-Editor aus, um eine Verbindung zu MySQL herzustellen:

import mysql.connector

mydb = mysql.connector.connect(
      host="localhost",
      user="username",
      passwd="password",
      database="database_name"
)

Beispiele für die Ausführung von MySQL-Befehlen (in Ihrem Python-Editor):

mycursor = mydb.cursor()
mycursor.execute("CREATE TABLE customers (name VARCHAR(255), address VARCHAR(255))")    
mycursor.execute("SHOW TABLES")

mycursor.execute("INSERT INTO customers (name, address) VALUES ('John', 'Highway 21')")    
mydb.commit() # Use this command after insert, update, delete commands

Für weitere Befehle: https://www.w3schools.com/python/python_mysql_getstarted.asp

0 Stimmen

Können Sie bitte diese Frage beantworten? Sie bezieht sich auf mysql-connector nur. stackoverflow.com/questions/59405740/

4 Stimmen

Einige Jungs haben deine Frage bereits beantwortet. Du hast nur vergessen, die mydb.commit() nach dem Einfügen von Werten in die Tabelle

18voto

bool.dev Punkte 17202

Für neuere Versionen von Python (>=3.6)

Verwenden Sie entweder mysqlclient o pymysql ( empfohlen ).

Für ältere Versionen von Python (<3.7, 2.4 <= Python <= 2.7)

Wenn Sie mit einer älteren Version von Python arbeiten ( leider ), dann könnten Sie auch versuchen, -> unserql .

Bitte beachten Sie jedoch, dass das Projekt nicht mehr gepflegt wird und auch keine Fehlerkorrekturen mehr vorgenommen werden.


Als db-Treiber gibt es auch unserql . Einige der Gründe, die in diesem Link aufgeführt sind und die besagen, warum oursql besser ist:

  • oursql verfügt über eine echte Parametrisierung und sendet SQL und Daten völlig getrennt an MySQL.
  • Mit oursql können Text- oder Binärdaten in die Datenbank und aus der Datenbank heraus gestreamt werden, statt dass alles im Client zwischengespeichert werden muss.
  • oursql kann sowohl lazily Zeilen einfügen als auch lazily Zeilen abrufen.
  • oursql hat die Unicode-Unterstützung standardmäßig aktiviert.
  • oursql unterstützt Python 2.4 bis 2.7 ohne jegliche Veralterungswarnungen auf 2.6+ (siehe PEP 218) und ohne komplette Fehlschläge auf 2.7 (siehe PEP 328).
  • oursql läuft nativ auf python 3.x.

Wie verbindet man sich also mit mysql mit oursql?

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]

El Lernprogramm 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.

1 Stimmen

Das Projekt wird nicht mehr gepflegt; die letzten Übertragungen in das Repository erfolgten 2016. Es funktioniert nicht mit Python 3.7 oder neuer und ist daher nicht mehr für alle derzeit unterstützten Python-Versionen verwendbar.

0 Stimmen

@MartijnPieters Danke, dass Sie mich darauf aufmerksam gemacht haben. Ich habe die Antwort aktualisiert, um die aktuelleren Bibliotheken zu berücksichtigen.

15voto

Anand Tripathi Punkte 11485

SqlAlchemie


SQLAlchemy ist das Python-SQL-Toolkit und der Object Relational Mapper, der Anwendungsentwicklern die volle Leistungsfähigkeit und Flexibilität von SQL bietet. SQLAlchemy bietet eine vollständige Suite bekannter Enterprise-Level Persistenzmustern, die für einen effizienten und leistungsfähigen Datenbankzugriff, angepasst an eine einfache und pythonische Domänensprache.

Einrichtung

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 import Column, Integer, String
from 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 instance
Base.metadata.bind = engine

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

14voto

Vishal Hule Punkte 961

Der beste Weg, um eine Verbindung zu MySQL von Python aus herzustellen, ist die Verwendung von MySQL Connector/Python, weil es der offizielle Oracle-Treiber für MySQL ist, der mit Python arbeitet und sowohl mit Python 3 als auch mit Python 2 funktioniert.

Führen Sie die folgenden Schritte aus, um MySQL zu verbinden

  1. Anschluss mit Pip installieren

    pip install mysql-connector-python

oder Sie können das Installationsprogramm herunterladen von https://dev.mysql.com/downloads/connector/python/

  1. Utilice connect() Methode von mysql connector python, um sich mit MySQL zu verbinden. Übergeben Sie das erforderliche Argument an connect() d.h. Host, Benutzername, Passwort und Datenbankname.

  2. erstellen. cursor Objekt aus dem Verbindungsobjekt, das von connect() Methode zur Ausführung von SQL-Abfragen.

  3. Schließen Sie die Verbindung nach Beendigung Ihrer Arbeit.

Beispiel :

import mysql.connector
 from mysql.connector import Error
 try:
     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)
 except Error as e :
    print ("Print your error msg", e)
 finally:
    #closing database connection.
    if(conn.is_connected()):
       cursor.close()
       conn.close()

Referenz - https://pynative.com/python-mysql-database-connection/

Wichtige API des MySQL Connectors Python

  • Für DML-Operationen - Verwenden Sie cursor.execute() y cursor.executemany() um die Abfrage zu starten. und danach verwenden Sie connection.commit() um Ihre Änderungen in der DB beizubehalten

  • Zum Abrufen von Daten - Verwenden Sie cursor.execute() um die Abfrage auszuführen und cursor.fetchall() , cursor.fetchone() , cursor.fetchmany(SIZE) zum Abrufen von Daten

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