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?
pymysql
vì đó là Python hoàn toàn miễn phí theo so sánh này .
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?
pymysql
vì đó là Python hoàn toàn miễn phí theo so sánh này .
Câu trả lời:
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.
pip install MySQL-python
Đâ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()
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ế?
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".
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()
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
pip install mysql-connector-python
cũ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
.
pip search mysql-connector
để tìm tên gói. câu trả lời từ đây: stackoverflow.com/a/22829966/2048266
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. pymysql
là 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.
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 ()
localhost
)?
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.
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.
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
mysql-connector
. stackoverflow.com/questions/59405740/
mydb.commit()
sau khi chèn các giá trị vào bảng
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.
pip install sqlalchemy
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()
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()
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()
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.
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()
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()
Vì vậy, có vẻ như mysqlclient nhanh hơn nhiều so với pymysql
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ử và 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
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
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/
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.
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.
đó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()
và 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
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.
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())
mysql.connector
và _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 MySQLdb
hoạt động, và sau đóMySQLdb.connect...
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 .
Đâ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()
đầ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
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()
Đầ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 ()
Đố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
Đầ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