wake-up-neo.com

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

Wie verbinde ich mich mit einer MySQL-Datenbank mit einem Programm python?

1096
Marc Lincoln

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 bei Python standardmäßig nur der SQLite-Treiber 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 erhalten Sie ein exe von MySQLdb .

Für Linux ist dies ein gelegentliches Paket (python-mysqldb). (Sie können Sudo apt-get install python-mysqldb (für debian-basierte Distributionen), yum install MySQL-python (für rpm-basierte) oder dnf install python-mysql (für die moderne Fedora-Distribution) 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 zwingend erforderlich, 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/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 Optionen; Dies ist ein sehr einfaches Beispiel. Sie müssen sich die Dokumentation ansehen. Ein guter Ausgangspunkt .

3 - Fortgeschrittenere 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 es Python Objekte. 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: peewee . Es ist ein sehr leichtes ORM, das sehr einfach und schnell einzurichten und dann zu verwenden ist. Es macht meinen Tag für kleine Projekte oder eigenständige Apps, wo die Verwendung großer Tools wie SQLAlchemy oder Django übertrieben 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 ist sofort einsatzbereit. Es ist nichts anderes als Peewee (pip install peewee) erforderlich.

1212
e-satis

Hier ist eine Möglichkeit, dies mit MySQLdb zu tun, die 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()

Hinweis hier

178
George Stocker

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/

117
Ken Brown

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 handelt sich um ein Paket (ca. 110 KB), reines Python, das systemunabhängig und kinderleicht zu installieren ist. Sie müssen nur herunterladen, doppelklicken, die Lizenzvereinbarung bestätigen und loslegen. Xcode, MacPorts, Kompilieren, Neustarten sind nicht erforderlich ...

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()
109
Mr. Napik

Stoppen Sie 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 implementiert mit KEINEN 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 ... EVER! - 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.

Beispielanwendung 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 schnell und transparent in vorhandenen Code

Wenn Sie bereits Code haben, der MySQLdb verwendet, können Sie diesen einfach durch pymysql ersetzen:

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

Alle nachfolgenden Verweise auf MySQLdb verwenden transparent pymysql.

107
OkezieE

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

Hier gibt es eine Anleitung: 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 ()
21
Hortitude

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

  • oursql verfügt über eine echte Parametrisierung, bei der SQL und Daten vollständig getrennt an MySQL gesendet werden.
  • mit oursql können Text- oder Binärdaten in die Datenbank 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 träge abrufen.
  • oursql unterstützt standardmäßig Unicode.
  • oursql unterstützt python 2.4 bis 2.7 ohne Verwerfungswarnungen für 2.6+ (siehe PEP 218) und ohne vollständige Fehler für 2.7 (siehe PEP 328).
  • oursql läuft nativ auf python 3.x.

Wie kann man sich mit oursql mit mysql verbinden?

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]

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.

18
bool.dev

Wenn Sie trotz aller obigen Antworten keine Verbindung zu einer bestimmten Datenbank herstellen möchten, z. B. um die Datenbank noch (!) Zu erstellen, können Sie connection.select_db(database) verwenden, wie im Folgenden gezeigt.

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

SQL-Chemie


SQLAlchemy ist das SQL-Toolkit Python und Object Relational Mapper, mit dem Anwendungsentwickler die volle Leistungsfähigkeit und Flexibilität von SQL nutzen können. SQLAlchemy bietet eine vollständige Suite bekannter Persistenzmuster auf Unternehmensebene, die für einen effizienten und leistungsstarken Datenbankzugriff ausgelegt sind 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 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):
    __table= '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()
9
anand tripathi

MySQLdb ist der einfache Weg. Sie können SQL-Abfragen über eine Verbindung ausführen. Zeitraum.

Mein bevorzugter Weg, der auch Pythonic ist, ist es, stattdessen das mächtige SQLAlchemy zu verwenden. Hier finden Sie ein abfragebezogenes Tutorial und hier ein Tutorial zu ORM-Funktionen von SQLALchemy.

8
muhuk

Nur eine Änderung in der obigen Antwort. Führen Sie einfach diesen Befehl aus, um mysql for python zu installieren

Sudo yum install MySQL-python
Sudo apt-get install MySQL-python

merken! Es wird zwischen Groß- und Kleinschreibung unterschieden.

5
HMS

für Python 3.6 habe ich zwei Treiber gefunden: pymysql und mysqlclient. Ich habe die Leistung zwischen ihnen getestet und das Ergebnis erhalten: Der mysqlclient ist schneller.

nachstehend ist mein Testprozess aufgeführt (zur Analyse des Zeitablaufs müssen python lib-Profilhooks installiert werden. :

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

hier ist das Pymysql-Profil: enter image description here


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: enter image description here

Es scheint also, dass mysqlclient viel schneller ist als pymysql

5
kai

Die beste Möglichkeit, von python aus eine Verbindung zu MySQL herzustellen, ist die Verwendung von MySQL Connector/Python, da es sich um den offiziellen Oracle-Treiber für MySQL handelt, der für die Arbeit mit Python und für beide Pythongeeignet ist. _ 3 und Python 2.

befolgen Sie die unten aufgeführten Schritte, um eine Verbindung zu MySQL herzustellen

  1. stecker mit pip einbauen

    pip install mysql-connector-python

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

  1. Verwenden Sie die Methode connect() des MySQL-Connectors python, um eine Verbindung zu MySQL herzustellen. Übergeben Sie das erforderliche Argument an die Methode connect(). d.h. Host, Benutzername, Passwort und Datenbankname.

  2. Erstellen Sie ein cursor -Objekt aus dem von der connect()Methode zurückgegebenen Verbindungsobjekt, um SQL-Abfragen auszuführen.

  3. schließen Sie die Verbindung, nachdem Ihre Arbeit abgeschlossen ist.

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 ("Your 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 von MySQL Connector Python

  • Für DML-Operationen - Verwenden Sie cursor.execute() und cursor.executemany(), um die Abfrage auszuführen. Verwenden Sie danach connection.commit(), um Ihre Änderungen an der Datenbank beizubehalten

  • Daten abrufen - Verwenden Sie cursor.execute(), um die Abfrage auszuführen, und cursor.fetchall(), cursor.fetchone(), cursor.fetchmany(SIZE), um Daten abzurufen

4
Vishal Hule

Schauen Sie sich auch Storm an. Es ist ein einfaches SQL-Mapping-Tool, mit dem Sie problemlos SQL-Einträge 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 it
class User(object):
        __storm_table__ = "user" # table name
        ID = Int(primary=True) #field ID
        name= Unicode() # field name

database = create_database("mysql://root:[email protected]:3306/databaseName")
store = Store(database)

user = User()
user.name = u"Mark"

print str(user.ID) # None

store.add(user)  
store.flush() # ID is AUTO_INCREMENT

print 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

Mit Primärschlüssel suchen:

print store.get(User, 1).name #Mark

Weitere Informationen finden Sie im Tutorial .

3
michip96

mysqlclient ist das Beste, da andere nur bestimmte Python-Versionen 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())

siehe https://github.com/PyMySQL/mysqlclient-python

3
Umer

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:

import mysql.connector

mydb = mysql.connector.connect(
      Host="localhost",
      user="yourusername",
      passwd="yourpassword",
      database="mydatabase"
)

Beispiele zum Ausführen von MySQL-Befehlen (in Ihrem python edior):

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 or update

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

3
Sherzod

installieren Sie zuerst den Treiber

pip install MySQL-python   

Dann sieht ein Basiscode so aus:

#!/usr/bin/python
import MySQLdb

try:
    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 database
    for each_row in cur.fetchall():
        print each_row

    # Close the connection
    db.close()
except Exception, e:
    print 'Error ', e 
1

Dies ist Mysql DB-Verbindung

from flask import Flask, render_template, request
from flask_mysqldb import MySQL

app = Flask(__name__)


app.config['MYSQL_Host'] = 'localhost'
app.config['MYSQL_USER'] = 'root'
app.config['MYSQL_PASSWORD'] = 'root'
app.config['MYSQL_DB'] = 'MyDB'

mysql = MySQL(app)


@app.route('/', methods=['GET', 'POST']) 
def index():
    if request.method == "POST":
        details = request.form
        cur = mysql.connection.cursor()
        cur.execute ("_Your query_")
        mysql.connection.commit()
        cur.close()
        return 'success'
    return render_template('index.html')


if __== '__main__':
    app.run()
1
A H M

sie können Ihren python Code auf diese Weise mit mysql verbinden.

import MySQLdb
db = MySQLdb.connect(Host="localhost",
                 user="appuser",
                 passwd="",
                 db="onco")

cursor = db.cursor()
1
Haider Ali

Installieren Sie zuerst den Treiber (Ubuntu)

  • Sudo apt-get installiert Python-Pip

  • Sudo pip install -U pip

  • Sudo apt-get install python-dev libmysqlclient-dev

  • Sudo apt-get installiert MySQL-Python

MySQL-Datenbankverbindungscodes

import MySQLdb
conn = MySQLdb.connect (Host = "localhost",user = "root",passwd = "pass",db = "dbname")
cursor = conn.cursor ()
cursor.execute ("SELECT VERSION()")
row = cursor.fetchone ()
print "server version:", row[0]
cursor.close ()
conn.close ()
0
Hasib Kamal

Für python 3.3

CyMySQL https://github.com/nakagami/CyMySQL

Ich habe Pip auf meinem Windows 7 installiert, nur Pip installieren Cymysql

(Sie brauchen kein Cython) schnell und schmerzlos

0
Lazik