Pertanyaan Bagaimana cara saya terhubung ke Database MySQL dengan Python?


Bagaimana cara saya terhubung ke database MySQL menggunakan program python?


972
2017-12-16 21:49


asal


Jawaban:


Menghubungkan ke MYSQL dengan Python dalam 3 langkah

1 - Pengaturan

Anda harus menginstal driver MySQL sebelum melakukan apa pun. Tidak seperti PHP, Hanya driver SQLite yang diinstal secara default dengan Python. Paket yang paling sering digunakan untuk melakukannya adalah MySQLdb tetapi sulit untuk menginstalnya menggunakan easy_install.

Untuk pengguna Windows, Anda bisa mendapatkan exe dari MySQLdb.

Untuk Linux, ini adalah paket biasa (python-mysqldb). (Kamu dapat memakai sudo apt-get install python-mysqldb (untuk distro berbasis debian), yum install MySQL-python (untuk berbasis rpm), atau dnf install python-mysql (untuk distro fedora modern) di baris perintah untuk mengunduh.)

Untuk Mac, Anda bisa instal MySQLdb menggunakan Macport.

2 - Penggunaan

Setelah menginstal, Reboot. Ini tidak wajib, Tapi itu akan mencegah saya menjawab 3 atau 4 pertanyaan lain di posting ini jika ada yang salah. Jadi tolong reboot.

Maka itu seperti menggunakan paket lain:

#!/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()

Tentu saja, ada ribuan kemungkinan dan pilihan; ini adalah contoh yang sangat mendasar. Anda harus melihat dokumentasi. Titik awal yang bagus.

3 - Penggunaan lebih lanjut

Setelah Anda tahu cara kerjanya, Anda mungkin ingin menggunakan ORM untuk menghindari menulis SQL secara manual dan memanipulasi tabel Anda karena mereka adalah objek Python. ORM paling terkenal di komunitas Python adalah SQLAlchemy.

Saya sangat menyarankan Anda untuk menggunakannya: hidup Anda akan jauh lebih mudah.

Saya baru-baru ini menemukan permata lain di dunia Python: orang kecil. Ini adalah ORM yang sangat ringan, sangat mudah dan cepat untuk diatur kemudian digunakan. Itu membuat hari saya untuk proyek-proyek kecil atau berdiri sendiri aplikasi, Di mana menggunakan alat-alat besar seperti SQLAlchemy atau Django adalah berlebihan:

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

Contoh ini bekerja di luar kotak. Tidak ada yang lain selain memiliki peewee (pip install peewee) Dibutuhkan.


1128
2017-12-16 21:51



Inilah satu cara untuk melakukannya:

#!/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()

Referensi di sini


158
2018-05-28 15:39



Oracle (MySQL) sekarang mendukung konektor Python murni. Itu berarti tidak ada binari untuk menginstal: itu hanya perpustakaan Python. Ini disebut "Connector / Python".

http://dev.mysql.com/downloads/connector/python/


105
2018-01-06 21:32



Jika Anda tidak membutuhkan MySQLdb, tetapi akan menerima perpustakaan apa pun, saya akan sangat, sangat merekomendasikan MySQL Connector / Python dari MySQL: http://dev.mysql.com/downloads/connector/python/.

Ini adalah satu paket (sekitar 110k), Python murni, sehingga sistemnya independen, dan mudah mati untuk dipasang. Anda cukup mengunduh, klik dua kali, konfirmasi perjanjian lisensi, dan mulai. Tidak perlu Xcode, MacPorts, kompilasi, restart ...

Kemudian Anda terhubung seperti:

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

95
2017-12-29 02:52



Berhenti Menggunakan MySQLDb jika Anda ingin menghindari menginstal header mysql hanya untuk mengakses mysql dari python.

Menggunakan pymysql. Ia melakukan semua apa yang MySQLDb lakukan, tetapi itu dilaksanakan murni dengan Python TIDAK ADA Dependensi Eksternal. Ini membuat proses instalasi pada semua sistem operasi menjadi konsisten dan mudah. pymysql adalah penurunan pengganti MySQLDb dan IMHO tidak ada alasan untuk menggunakan MySQLDb untuk apa pun ... PERNAH! - PTSD from installing MySQLDb on Mac OSX and *Nix systems, tapi itu hanya aku.

Instalasi

pip install pymysql

Itu saja ... Anda siap bermain.

Contoh penggunaan dari 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, ('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()

JUGA - Ganti MySQLdb dalam kode yang ada dengan cepat dan transparan

Jika Anda memiliki kode yang ada yang menggunakan MySQLdb, Anda dapat dengan mudah menggantinya dengan pymysql menggunakan proses sederhana ini:

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

Semua referensi selanjutnya ke MySQLdb akan menggunakan pymysql secara transparan.


85
2017-10-15 21:25



Sebagai pengemudi db, ada juga oursql. Beberapa alasan yang tercantum di tautan itu, yang mengatakan mengapa oursql lebih baik:

  • oursql memiliki parameterisasi nyata, mengirim SQL dan data ke MySQL sepenuhnya secara terpisah.
  • oursql memungkinkan teks atau data biner untuk dialirkan ke dalam basis data dan dialirkan keluar dari basis data, daripada mengharuskan segala sesuatu disangga dalam klien.
  • oursql dapat menyisipkan baris dengan malas dan mengambil baris dengan malas.
  • oursql memiliki dukungan unicode secara default.
  • oursql mendukung python 2.4 hingga 2.7 tanpa peringatan depresiasi pada 2.6+ (lihat PEP 218) dan tanpa benar-benar gagal pada 2.7 (lihat PEP 328).
  • oursql berjalan secara native pada python 3.x.

Jadi bagaimana cara menyambung ke mysql dengan oursql?

Sangat mirip dengan 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]

Itu tutorial dalam dokumentasi lumayan bagus.

Dan tentu saja untuk ORM SQLAlchemy adalah pilihan yang baik, sebagaimana telah disebutkan dalam jawaban lainnya.


18
2017-12-16 21:52



Coba gunakan MySQLdb

Ada cara untuk halaman di sini: http://www.kitebird.com/articles/pydbapi.html


Dari halaman:

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

17
2018-06-22 14:18



Terlepas dari semua jawaban di atas, jika Anda tidak ingin terhubung ke pusat data spesifik di muka, misalnya, jika Anda ingin membuat database tetap (!), Anda dapat menggunakan connection.select_db(database), seperti yang ditunjukkan berikut ini.

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
2017-12-16 22:29



MySQLdb adalah cara langsung. Anda bisa mengeksekusi query SQL melalui koneksi. Periode.

Cara yang saya sukai, yang juga pythonic, adalah menggunakan yang perkasa SQLAlchemy sebagai gantinya. Ini dia permintaan terkait tutorial, dan di sini adalah tutorial tentang Kemampuan ORM dari SQLALchemy.


8
2018-04-11 16:13



SqlAlchemy


SQLAlchemy adalah toolkit Python SQL dan Object Relational Mapper itu   memberikan pengembang aplikasi kekuatan penuh dan fleksibilitas dari SQL.   SQLAlchemy menyediakan rangkaian lengkap tingkat perusahaan terkenal   pola ketekunan, dirancang untuk efisien dan berkinerja tinggi   akses database, diadaptasi menjadi bahasa domain sederhana dan Pythonic.

Instalasi

pip install sqlalchemy

Penggunaan dengan kueri RAW

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session

engine = create_engine("mysql://<user_name>:<password>@<host_name>/smsmagic")
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()

Penggunaan dengan cara ORM

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>/smsmagic")
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()

7
2017-09-21 04:31