Làm cách nào để kết nối với Cơ sở dữ liệu MySQL trong Python?


1163

Làm cách nào để kết nối với cơ sở dữ liệu MySQL bằng chương trình python?


44
Hầu hết các câu trả lời ở đây tập trung vào việc cài đặt thư viện MySQLdb, tôi thực sự khuyên bạn nên chọn Trình kết nối MySQL / Python do MySQL / Oracle cung cấp, giúp quá trình này đơn giản hơn nhiều: stackoverflow.com/questions/372885/
trộm

8
Vấn đề với việc sử dụng Trình kết nối / Python của Oracle là nó có các lỗi tinh vi và các vấn đề tích hợp khác. Thật dễ dàng để cài đặt, nhưng gần như không thể hoạt động cho tất cả các trường hợp sử dụng trong thế giới thực mà tôi đã thử. Do đó tại sao tôi luôn khuyên dùng MySQLdb.
Joe C.

7
@ Mr.Napik Tôi đang sử dụng pymysqlvì đó là Python hoàn toàn miễn phí theo so sánh này .
Cees Timmerman

Câu trả lời:


1246

Kết nối với MYSQL với Python 2 theo ba bước

1 - Cài đặt

Bạn phải cài đặt trình điều khiển MySQL trước khi làm bất cứ điều gì. Không giống như PHP, chỉ có trình điều khiển SQLite được cài đặt theo mặc định với Python. Gói được sử dụng nhiều nhất để làm như vậy là MySQLdb nhưng thật khó để cài đặt nó bằng easy_install. Xin lưu ý MySQLdb chỉ hỗ trợ Python 2.

Đối với người dùng Windows, bạn có thể nhận được exe của MySQLdb .

Đối với Linux, đây là một gói thông thường (python-mysqldb). (Bạn có thể sử dụng sudo apt-get install python-mysqldb(cho các bản phân phối dựa trên debian), yum install MySQL-python(cho bản dựa trên vòng / phút) hoặc dnf install python-mysql(cho bản phân phối fedora hiện đại) trong dòng lệnh để tải xuống.)

Đối với Mac, bạn có thể cài đặt MySQLdb bằng Macport .

2 - Cách sử dụng

Sau khi cài đặt, Khởi động lại. Điều này không bắt buộc, nhưng nó sẽ ngăn tôi trả lời 3 hoặc 4 câu hỏi khác trong bài đăng này nếu có sự cố. Vì vậy, hãy khởi động lại.

Sau đó, nó giống như sử dụng bất kỳ gói nào khác:

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

Tất nhiên, có hàng ngàn khả năng và lựa chọn; đây là một ví dụ rất cơ bản Bạn sẽ phải xem tài liệu. Một điểm khởi đầu tốt .

3 - Sử dụng nâng cao hơn

Khi bạn biết cách thức hoạt động của nó, Bạn có thể muốn sử dụng ORM để tránh viết SQL theo cách thủ công và thao tác các bảng của bạn vì chúng là các đối tượng Python. ORM nổi tiếng nhất trong cộng đồng Python là SQLAlchemy .

Tôi thực sự khuyên bạn nên sử dụng nó: cuộc sống của bạn sẽ dễ dàng hơn nhiều.

Gần đây tôi đã phát hiện ra một viên ngọc khác trong thế giới Python: peewee . Đó là một ORM rất nhỏ, thực sự dễ dàng và nhanh chóng để thiết lập sau đó sử dụng. Nó làm cho ngày của tôi cho các dự án nhỏ hoặc các ứng dụng độc lập, trong đó việc sử dụng các công cụ lớn như SQLAlchemy hoặc Django là quá mức cần thiết:

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

Ví dụ này hoạt động ra khỏi hộp. Không có gì khác ngoài việc có peewee ( pip install peewee) là bắt buộc.


46
Vui mừng bạn thích peewee !! Tôi đã thêm hỗ trợ cho MySQL cũng như một số tài liệu về tích hợp với nó. Chúc mừng hack!
coleifer

14
Lưu ý, khi viết bài này, MySQLdb không hỗ trợ Python 3. Trang sourceforge cho biết "Sắp có hỗ trợ Python 3" nhưng nó chưa được cập nhật kể từ 2012-10-08. Đối với Python 3 có PyMySQLoursql .
paul

8
Cũng lưu ý những điều sau đây là bắt buộc:pip install MySQL-python
Ben Crowhurst

5
Câu trả lời này sẽ hữu ích hơn với kết nối ví dụ với máy chủ bên ngoài trên một cổng không chuẩn để chỉ ra cách thực hiện. Nói localhost là cách thông thường để làm điều đó là vô nghĩa.
Anthony

3
Peewee đã thay đổi hành vi mặc định và không sử dụng autocommit theo mặc định nữa. Ngay cả tình hình trình điều khiển DB đã thay đổi ngay bây giờ. Câu hỏi cần cập nhật, nhưng vì lạm dụng các chỉnh sửa trên một số câu trả lời của tôi, tôi không chỉnh sửa chúng nữa.
e-satis

189

Đây là một cách để làm điều đó, sử dụng MySQLdb , chỉ hỗ trợ Python 2:

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

Tham khảo tại đây


4
Có cần phải cam kết trong ví dụ này vì bạn không sửa đổi cơ sở dữ liệu?
sumanth 232

3
BEWARE - mô-đun này không có hỗ trợ múi giờ về kết nối
kommradHomer

Nó không hoạt động trên lưu trữ chia sẻ của tôi. Nói rằng No module named MySQLdb. Làm thế nào tôi có thể sử dụng mysql với python trên chia sẻ lưu trữ. Bất kỳ thay thế?
Bhavesh Gangani

@BhaveshGangani bạn sẽ cần liên hệ với máy chủ của mình và hỏi tại sao thư viện Python mà họ hỗ trợ. Nếu họ hỗ trợ pypi, thì bạn luôn có thể tải gói khi triển khai.
George Stocker

1
Thật thú vị mặc dù các tài liệu nói rằng điều này chỉ hoạt động với python 2, nhưng nó dường như hoạt động với python 3 đối với tôi
lucidbrot

122

Oracle (MySQL) hiện hỗ trợ trình kết nối Python thuần túy. Điều đó có nghĩa là không có tệp nhị phân nào để cài đặt: nó chỉ là một thư viện Python. Nó được gọi là "Trình kết nối / Python".

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


1
điều này có nhanh hơn việc sử dụng mysqldb không?
alwbtc

8
Vâng, đúng vậy. Ngoài ra, theo tôi thì nó ít rắc rối hơn so với MySQLdb và API tốt hơn. Đây nên là câu trả lời.
Anthony

1
sử dụng trình kết nối mysql chính thức của python là cách tốt nhất để giành thời gian
Anas

2
@ J0hnG4lt Bạn có thể chỉ cần nhấp vào "Không, cảm ơn, chỉ cần bắt đầu tải xuống của tôi" bên dưới mẫu đăng nhập (điều này thực sự có vẻ bắt buộc, nhưng không phải).
ComFalet

6
@ComFalet tuyệt vời. Làm thế nào là tốt hơn? Chúng ta có thể ngừng áp dụng "quy trình làm việc của Windows" không. Quản lý gói tồn tại.
J0hnG4lt

120

Nếu bạn không cần MySQLdb, nhưng sẽ chấp nhận bất kỳ thư viện nào, tôi rất, rất khuyến nghị Trình kết nối / Python của MySQL từ MySQL: http://dev.mysql.com/doads/connector/python/ .

Nó là một gói (khoảng 110k), Python thuần túy, vì vậy nó độc lập với hệ thống và rất đơn giản để cài đặt. Bạn chỉ cần tải xuống, nhấp đúp chuột, xác nhận thỏa thuận cấp phép và đi. Không cần Xcode, MacPorts, biên dịch, khởi động lại

Sau đó, bạn kết nối như:

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

2
Không hoàn toàn đơn giản như bạn yêu cầu. Khi tôi cố gắng cài đặt vòng / phút, tôi đã gặp một số vấn đề phụ thuộc (FileDigests và PayloadIsXz) từ RPM của mình: 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
tatlar

2
Tôi đã từng thích thư viện này, nhưng nó không còn được hỗ trợ chính thức trên PyPi. Tôi đã chuyển sang MySQLdb.
Steven Mercatante

2
@Arms: không còn được hỗ trợ chính thức trên PyPi? Bạn có nguồn nào cho việc này không?
Messa

7
pip install mysql-connector-pythoncũng sẽ làm việc Tôi không thấy nơi nó nói không còn được hỗ trợ trên PyPi? Tuyệt vời nếu bạn không có quyền truy cập vào trình biên dịch gcc / C trên hệ thống của mình và do đó không thể cài đặt mysqldb.
quyết định

7
kể từ ngày 7 tháng 11 năm 2016, gói cho pip chỉ là trình kết nối mysql, pip search mysql-connectorđể tìm tên gói. câu trả lời từ đây: stackoverflow.com/a/22829966/2048266
nommer

117

Ngừng sử dụng MySQLDb nếu bạn muốn tránh cài đặt các tiêu đề mysql chỉ để truy cập mysql từ python.

Sử dụng pymysql . Nó thực hiện tất cả những gì MySQLDb làm, nhưng nó được thực hiện hoàn toàn bằng Python mà KHÔNG phụ thuộc bên ngoài . Điều này làm cho quá trình cài đặt trên tất cả các hệ điều hành phù hợp và dễ dàng. pymysqllà sự thay thế cho MySQLDb và IMHO không có lý do gì để sử dụng MySQLDb cho bất cứ điều gì ... EVER! - PTSD from installing MySQLDb on Mac OSX and *Nix systems, nhưng đó chỉ là tôi.

Cài đặt

pip install pymysql

Đó là ... bạn đã sẵn sàng để chơi.

Ví dụ sử dụng từ 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()

CSONG - Thay thế MySQLdb trong mã hiện có một cách nhanh chóng và minh bạch

Nếu bạn có mã hiện có sử dụng MySQLdb, bạn có thể dễ dàng thay thế nó bằng pymysql bằng quy trình đơn giản này:

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

Tất cả các tham chiếu tiếp theo đến MySQLdb sẽ sử dụng pymysql trong suốt.


3
"Luôn luôn" là một chút mạnh mẽ ... Điều gì là sai với peewee hoặc sqlalchemy? Ngay cả khi chúng tồn tại dưới dạng thư viện ORM, chúng vẫn hữu ích
OneCricketeer

4
Không, tôi không nghĩ nó mạnh cả. Được cung cấp tùy chọn sử dụng MySQLDb hoặc PyMysql Tôi nghĩ rằng việc chọn PyMysql là không có trí tuệ vì nó là một cài đặt pip đơn giản không có phụ thuộc, trong khi MySQLDb yêu cầu các tệp tiêu đề phát triển mysql được cài đặt cho nền tảng HĐH của bạn để nó hoạt động. Sqlalchemy không tham gia vào vấn đề này bởi vì nó vẫn cần bao bọc một mô-đun có thể nói chuyện với mysql như PyMysql, MySQLDb, CyMyQuery, v.v. Peewee trông có vẻ thú vị, mặc dù vậy, tôi sẽ kiểm tra xem
OkezieE

2
@ cricket_007 peewee và sqlalchemly không thực hiện trình kết nối db của riêng họ, họ cung cấp một lớp trên
MySQLdb,

25

Hãy thử sử dụng MySQLdb . MySQLdb chỉ hỗ trợ Python 2.

Có một cách để trang ở đây: http://www.kitebird.com/articles/pydbapi.html


Từ trang:

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

2
BEWARE - mô-đun này không hỗ trợ múi giờ trên kết nối
kommradHomer

1
@kommradHomer Bạn có thể giải thích rõ hơn không?
Pyderman

1
@kommradHomer - múi giờ hỗ trợ gì cho bạn (hoặc những người khác - đặc biệt là khi kết nối với localhost)?
warren

1
@warren không, tôi đã không kết nối localhost trong trường hợp của mình
kommradHomer

1
Làm cách nào để phát hiện thư viện nào được cài đặt để kết nối với cơ sở dữ liệu?
posfan12

18

Là một trình điều khiển db, đó cũng là của chúng tôi . Một số lý do được liệt kê trên liên kết đó, cho biết lý do tại sao chúng tôi tốt hơn:

  • oursql có tham số hóa thực sự, gửi SQL và dữ liệu tới MySQL hoàn toàn riêng biệt.
  • oursql cho phép văn bản hoặc dữ liệu nhị phân được truyền trực tiếp vào cơ sở dữ liệu và truyền ra khỏi cơ sở dữ liệu, thay vì yêu cầu mọi thứ được đệm trong máy khách.
  • oursql có thể vừa chèn hàng vừa lười biếng và lấy hàng một cách lười biếng.
  • oursql có hỗ trợ unicode theo mặc định.
  • oursql hỗ trợ python 2.4 đến 2.7 mà không có bất kỳ cảnh báo khấu hao nào trên 2.6+ (xem PEP 218) và không hoàn toàn thất bại trên 2.7 (xem PEP 328).
  • oursql chạy tự nhiên trên python 3.x.

Vậy làm thế nào để kết nối với mysql với oursql?

Rất giống với 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]

Các hướng dẫn trong tài liệu là khá phong nha.

Và tất nhiên đối với ORM SQLAlchemy là một lựa chọn tốt, như đã được đề cập trong các câu trả lời khác.


4
Tôi không hiểu 'chạy tự nhiên trên python 3.x'. Tôi vừa thử cài đặt nó và cài đặt bom lạ vì nó thậm chí không sử dụng các cuộc gọi in tương thích với Python 3. Nghe có vẻ tuyệt vời cho đến khi tôi thực sự thử nó.
otakucode

15

Chạy lệnh này trong thiết bị đầu cuối của bạn để cài đặt trình kết nối mysql:

pip install mysql-connector-python

Và chạy nó trong trình soạn thảo python của bạn để kết nối với MySQL:

import mysql.connector

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

Các mẫu để thực thi các lệnh MySQL (trong phiên bản python của bạn):

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

Để biết thêm các lệnh: https://www.w3schools.com/python/python_mysql_getstarted.asp


Bạn có thể vui lòng trả lời điều này không ?? Nó chỉ liên quan đến mysql-connector. stackoverflow.com/questions/59405740/

1
Một số kẻ đã trả lời câu hỏi của bạn ở đó. Bạn chỉ quên chạy mydb.commit()sau khi chèn các giá trị vào bảng
Sherzod

13

SqlAlchemy


SQLAlchemy là bộ công cụ SQL Python và Mapper quan hệ đối tượng cung cấp cho các nhà phát triển ứng dụng toàn bộ sức mạnh và tính linh hoạt của SQL. SQLAlchemy cung cấp một bộ đầy đủ các mẫu lưu trữ cấp độ doanh nghiệp nổi tiếng, được thiết kế để truy cập cơ sở dữ liệu hiệu quả và hiệu suất cao, được điều chỉnh thành ngôn ngữ miền đơn giản và Pythonic.

Cài đặt

pip install sqlalchemy

Truy vấn RAW

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

Cách 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>/<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()

11

Mặc dù tất cả các câu trả lời ở trên, trong trường hợp bạn không muốn kết nối với một cơ sở dữ liệu cụ thể, chẳng hạn, nếu bạn muốn tạo cơ sở dữ liệu vẫn (!), Bạn có thể sử dụng connection.select_db(database), như được trình bày dưới đây.

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

8

MySQLdb là cách đơn giản. Bạn có thể thực hiện các truy vấn SQL qua một kết nối. Giai đoạn = Stage.

Cách ưa thích của tôi, cũng là pythonic, là sử dụng SQLAlchemy hùng mạnh thay thế. Đây là một hướng dẫn liên quan đến truy vấn và đây là hướng dẫn về các khả năng ORM của SQLALchemy.


1
Các liên kết đã chết, bạn có thể xem xét và cập nhật nó với liên kết chính xác không?
Naveen Vijay

6

cho Python3.6 tôi tìm thấy hai trình điều khiển: pymysql và mysqlclient. Tôi đã thử nghiệm hiệu năng giữa chúng và nhận được kết quả: mysqlclient nhanh hơn.

Dưới đây là quá trình thử nghiệm của tôi (cần cài đặt hồ sơ lib python để phân tích thời gian trôi qua

sql thô: select * from FOO;

thực hiện ngay lập tức trong thiết bị đầu cuối mysql: 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()

đây là hồ sơ pymysql: nhập mô tả hình ảnh ở đây


mysqlclient (0,4 giây)

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

đây là hồ sơ mysqlclient: nhập mô tả hình ảnh ở đây

Vì vậy, có vẻ như mysqlclient nhanh hơn nhiều so với pymysql


6

Mặc dù một số bạn có thể đánh dấu điều này là trùng lặp và buồn bã rằng tôi đang sao chép câu trả lời của người khác, tôi thực sự muốn làm nổi bật khía cạnh phản ứng của ông Napik. Bởi vì tôi đã bỏ lỡ điều này, tôi đã gây ra thời gian chết trang web trên toàn quốc (9 phút). Nếu chỉ có ai đó chia sẻ thông tin này, tôi có thể đã ngăn chặn nó!

Đây là mã của anh ấy:

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

Điều quan trọng ở đây là mệnh đề ThửCuối cùng . Điều này cho phép các kết nối tới LUÔN LUÔN được đóng lại, bất kể điều gì xảy ra trong phần con trỏ / sqlstatement của mã. Rất nhiều kết nối hoạt động khiến DBLoadNoCPU tăng đột biến và có thể làm sập máy chủ db.

Tôi hy vọng cảnh báo này sẽ giúp tiết kiệm máy chủ và cuối cùng là việc làm! : D


6

Cách tốt nhất để kết nối với MySQL từ python là sử dụng Trình kết nối / Python của MySQL vì đây là trình điều khiển chính thức của Oracle cho MySQL để làm việc với Python và nó hoạt động với cả Python 3 và Python 2.

làm theo các bước được đề cập dưới đây để kết nối MySQL

  1. cài đặt kết nối bằng pip

    pip install mysql-connector-python

hoặc bạn có thể tải xuống trình cài đặt từ https://dev.mysql.com/doads/connector/python/

  1. Sử dụng connect()phương thức python trình kết nối mysql để kết nối với MySQL. Vượt qua đối số cần thiết để connect()phương thức. tức là máy chủ, tên người dùng, mật khẩu và tên cơ sở dữ liệu.

  2. Tạo cursorđối tượng từ đối tượng kết nối được trả về bởi connect()phương thức để thực hiện các truy vấn SQL.

  3. đóng kết nối sau khi công việc của bạn hoàn thành.

Ví dụ :

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

Tham khảo - https://pynative.com/python-mysql-database-connection/

API quan trọng của trình kết nối MySQL Python

  • Đối với các hoạt động DML - Sử dụng cursor.execute()cursor.executemany()để chạy truy vấn. và sau khi sử dụng connection.commit()để duy trì các thay đổi của bạn đối với DB

  • Để lấy dữ liệu - Sử dụng cursor.execute()để chạy truy vấn và cursor.fetchall(), cursor.fetchone(), cursor.fetchmany(SIZE)để lấy dữ liệu


Bạn * đã kết nối với ...
John Forbes

5

Chỉ cần một sửa đổi trong câu trả lời ở trên. Đơn giản chỉ cần chạy lệnh này để cài đặt mysql cho python

sudo yum install MySQL-python
sudo apt-get install MySQL-python

nhớ lại! Đó là trường hợp nhạy cảm.


Tôi đã cài đặt MySQL-python thông qua cài đặt yum. Quá trình cài đặt đã hoàn tất nhưng tôi không thể nhập mô-đun MySQLdb. Nó nói không có mô-đun như vậy. Bất cứ ý tưởng tại sao nó là như vậy?
dùng3527975

Không rõ câu trả lời của bạn là gì khi bạn nói "câu trả lời trên". Hãy làm cho câu trả lời của bạn hoàn thành trong chính nó. Nếu bạn muốn tham khảo các câu trả lời khác, vui lòng liên kết với câu trả lời cụ thể.
Flimm

5

mysqlclient là tốt nhất vì những người khác chỉ cung cấp hỗ trợ cho các phiên bản cụ thể của python

 pip install mysqlclient

mã ví dụ

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

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


+1 để đề xuất giải pháp nhanh nhất cho python 3. Tuy nhiên, mysql.connector_mysqlđưa ra cả lỗi nhập (mặc dù tùy chọn thứ hai sẽ hoạt động theo tài liệu). import MySQLdbhoạt động, và sau đóMySQLdb.connect...
Suzana

3

Ngoài ra hãy xem Storm . Nó là một công cụ ánh xạ SQL đơn giản cho phép bạn dễ dàng chỉnh sửa và tạo các mục SQL mà không cần viết các truy vấn.

Đây là một ví dụ đơn giản:

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: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_INCREMENT

print str(user.ID) # 1 (ID)

store.commit() # commit all changes to the database

Để tìm và sử dụng đối tượng:

michael = store.find(User, User.name == u"Michael").one()
print str(user.ID) # 10

Tìm với khóa chính:

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

Để biết thêm thông tin xem hướng dẫn .


2

Đây là kết nối DB DB

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 __name__ == '__main__':
    app.run()

1

đầu tiên cài đặt trình điều khiển

pip install MySQL-python   

Sau đó, một mã cơ bản sẽ như thế này:

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

bạn có thể kết nối mã python của bạn với mysql theo cách này.

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

cursor = db.cursor()

1

Đầu tiên cài đặt trình điều khiển (Ubuntu)

  • sudo apt-get cài đặt python-pip

  • cài đặt sudo pip -U pip

  • sudo apt-get cài đặt python-dev libmysqlclient-dev

  • sudo apt-get cài đặt MySQL-python

Mã kết nối cơ sở dữ liệu MySQL

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

Đối với trăn 3,3

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

Tôi đã cài đặt pip trên windows 7 của mình, chỉ cần cài đặt cymysql

(bạn không cần cython) nhanh chóng và không đau


3
Bạn có thể tạo một câu hỏi mới về SO và bình luận với một liên kết đến nó ở đây.
Lazik

-1

Đầu tiên, cài đặt trình kết nối python-mysql từ https://dev.mysql.com/doads/connector/python/

trên bảng điều khiển Python, nhập:

pip install mysql-connector-python-rf
import mysql.connector

1
Câu hỏi hơi rộng, nhưng câu trả lời này có vẻ hơi hẹp (ít nhất là theo nghĩa là chỉ cài đặt và nhập một mô-đun sẽ không làm được). Dường như cũng có shell và python được trộn lẫn trong khối mã đơn mà không có bất kỳ lời giải thích hay gợi ý nào về việc đi đâu và làm gì.
Ondrej K
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.