ฉันจะเชื่อมต่อกับ MySQL ใน Python 3 บน Windows ได้อย่างไร


145

ฉันใช้ ActiveState Python 3 บน Windows และต้องการเชื่อมต่อกับฐานข้อมูล MySQL ของฉัน ฉันได้ยินมาว่าmysqldbเป็นโมดูลที่ใช้ ฉันหาmysqldbPython 3 ไม่เจอ

มีพื้นที่เก็บข้อมูลที่มีอยู่ไบนารีmysqldbหรือไม่ ฉันจะเชื่อมต่อกับ MySQL ใน Python 3 บน Windows ได้อย่างไร


ขอบคุณ casevh สำหรับลิงก์ไปยังไบนารีที่ไม่เป็นทางการ แต่ฉันใจร้อนเกินไปและปรากฏว่าฝูงยังคงใช้ python2 ... ดังนั้นฉันจึงติดตั้ง python 2.7 และติดตั้ง MySQLdb จากcodegood.com/archives/129
panofish

1
เป็นไปได้ที่ซ้ำกันของMySQL-db lib สำหรับ Python 3.0?
itsadok

1
ทุกครั้งที่ฉันพิมพ์พิพท้องจะปั่นป่วน 7 ปีและการนับ
สกา

คำตอบ:


274

ขณะนี้มีบางตัวเลือกสำหรับการใช้ Python 3 กับ mysql:

https://pypi.python.org/pypi/mysql-connector-python

  • Oracle สนับสนุนอย่างเป็นทางการ
  • หลามบริสุทธิ์
  • ช้าไปหน่อย
  • เข้ากันไม่ได้กับ MySQLdb

https://pypi.python.org/pypi/pymysql

  • หลามบริสุทธิ์
  • เร็วกว่าตัวเชื่อมต่อ mysql
  • เกือบเข้ากันได้อย่างสมบูรณ์กับMySQLdbหลังจากโทรpymysql.install_as_MySQLdb()

https://pypi.python.org/pypi/cymysql

  • fork ของ pymysql พร้อมการเพิ่มความเร็ว C

https://pypi.python.org/pypi/mysqlclient

  • ห้องสมุดที่แนะนำของ Django
  • ทางแยกที่เป็นมิตรของ MySQLdb ดั้งเดิมหวังว่าจะรวมกลับบางวัน
  • การใช้งานที่เร็วที่สุดเนื่องจากเป็นพื้นฐานของ C
  • เข้ากันได้กับ MySQLdb มากที่สุดเพราะเป็นทางแยก
  • Debian และ Ubuntu ใช้มันเพื่อให้ทั้งสองpython-mysqldbและpython3-mysqldbแพคเกจ

การวัดประสิทธิภาพที่นี่: https://github.com/methane/mysql-driver-benchmarks


26
pip install mysqlclient เพิ่งทำงานให้ฉัน! ขอบคุณสำหรับรายการตัวเลือกที่ครอบคลุม
ILMostro_7

4
mysqlclientเพิ่งทำงานกับ Python3.4 + Django + Passenger + Dreamhost ของฉันที่ติดตั้ง
ryanjdillon

Ubuntuมี mysqlclient Debianไม่ใช่
ManuelSchneid3r

ดูเหมือนว่า mysqlclient จะเดเบียนtestingเหมือนpython3-mysqldbแต่มันไม่ได้อยู่ในstableนั้น ดังนั้นมันจะอยู่ในรุ่นถัดไป
Collin Anderson

สำหรับการติดตั้งตัวเชื่อมต่อ mysql บน Ubuntu คุณสามารถใช้ apt like ได้sudo apt-get install python3-mysql.connector
peiman F.

67

คุณน่าจะใช้pymysql - ไคลเอนต์ Pure Python MySQLแทน
ใช้งานได้กับ Python 3.x และไม่มีการขึ้นต่อกันใด ๆ

Python MySQL ไคลเอนต์บริสุทธิ์นี้ให้ DB-API ไปยังฐานข้อมูล MySQL โดยการพูดคุยโดยตรงกับเซิร์ฟเวอร์ผ่านไบนารี่ไคลเอนต์ / โปรโตคอลเซิร์ฟเวอร์

ตัวอย่าง:

import pymysql
conn = pymysql.connect(host='127.0.0.1', unix_socket='/tmp/mysql.sock', user='root', passwd=None, db='mysql')
cur = conn.cursor()
cur.execute("SELECT Host,User FROM user")
for r in cur:
    print(r)
cur.close()
conn.close()

14
โชคไม่ดีที่มันเป็นห้องสมุดที่มีเอกสารเป็นศูนย์ซึ่งไม่สามารถทำงานได้
o0 '

7
@ โลฮาริส: ทำไมฉันถึงใช้มันโดยไม่มีปัญหา?
Oleh Prypin

ฉันไม่สามารถติดตั้งสิ่งนี้บน Windows 7 ด้วย Python 3.x ใครรู้บ้าง
พอล

3
Python เวอร์ชั่น 3.3.1 ที่นี่และมันไม่ได้ติดตั้ง constantsบ่นเกี่ยวกับการหายโมดูลที่เรียกว่า
Pijusn

@Pius เพราะคุณทำผิด เพิ่งตรวจสอบและใช้งานได้
Oleh Prypin

7

ฉันยังลองใช้ pymysql (บนเครื่อง Win7 x64 ของฉัน Python 3.3) โดยไม่มีโชคมากเกินไป ฉันดาวน์โหลด. tar.gz, แยก, รัน "setup.py ติดตั้ง" และทุกอย่างดูดี จนกว่าฉันจะพยายามเชื่อมต่อกับฐานข้อมูลและได้ "KeyError [56]" ข้อผิดพลาดที่ฉันไม่สามารถค้นหาเอกสารได้ทุกที่

ดังนั้นผมจึงให้ขึ้น pymysql และฉันนั่งลงบนการเชื่อมต่อของ Oracle MySQL

มันมาพร้อมกับแพ็คเกจการติดตั้งและใช้งานได้ทันที และมันก็ดูเหมือนว่าเอกสารที่เหมาะสม


ฉันใช้ MySQLdb และใช้งานได้ดี แต่ชัดเจนฉันคาดหวังว่าสิ่งนี้จะกลายเป็นมาตรฐาน defacto เมื่อเวลาผ่านไป
panofish

6

ถ้าคุณต้องการใช้ MySQLdb ก่อนอื่นคุณต้องติดตั้ง pymysql บนพีซีของคุณโดยพิมพ์ cmd ของ windows

    pip install pymysql

จากนั้นใน python shell ให้พิมพ์

    import pymysql
    pymysql.install_as_MySQLdb()
    import MySQLdb
    db = MySQLdb.connect("localhost" , "root" , "password")

สิ่งนี้จะสร้างการเชื่อมต่อ



5

สรุป

Mysqlclientเป็นทางเลือกที่ดีที่สุด (IMHO) เพราะทำงานได้อย่างไม่มีที่ติกับ Python 3+ตามอนุสัญญาที่คาดไว้(ต่างจากขั้วต่อ mysql) ใช้ชื่อวัตถุmysqldbซึ่งทำให้สามารถย้ายพอร์ตของซอฟต์แวร์ที่มีอยู่ได้สะดวกและใช้Djangoสำหรับ Python 3

มีพื้นที่เก็บข้อมูลที่มีไบนารีสำหรับ mysqldb หรือไม่

ใช่. mysqlclient ให้คุณใช้ฟังก์ชัน mysqldb แม้ว่าจำไว้ว่านี่ไม่ใช่พอร์ตโดยตรงโดย mysqldb แต่เป็น build โดย mysqlclient

ฉันจะเชื่อมต่อกับ MySQL ใน Python 3 บน Windows ได้อย่างไร

pip ติดตั้ง mysqlclient

ตัวอย่าง

#!/Python36/python
#Please change above path to suit your platform.  Am running it on Windows
import MySQLdb
db = MySQLdb.connect(user="my-username",passwd="my-password",host="localhost",db="my-databasename")
cursor = db.cursor()
cursor.execute("SELECT * from my-table-name")
data=cursor.fetchall()
for row in data :
    print (row)
db.close()

ฉันหา mysqldb สำหรับ Python 3 ไม่พบ

mysqldb ยังไม่ได้รับการย้ายพอร์ต


4

PyMySQL ให้ MySQLDb เหมือนอินเทอร์เฟซเช่นกัน คุณสามารถลองในการเริ่มต้นของคุณ:

import pymysql
pymysql.install_as_MySQLdb()

นอกจากนี้ยังมีพอร์ตของ mysql-python บน github สำหรับ python3

https://github.com/davispuh/MySQL-for-Python-3


2

Oracle / MySQL ให้บริการไดรเวอร์ PAPE DBAPI ที่เป็นทางการและเป็นทางการ: http://dev.mysql.com/downloads/connector/python/

ฉันใช้กับ Python 3.3 และพบว่าใช้งานได้ดี ยังทำงานร่วมกับ SQLAlchemy

ดูคำถามนี้ด้วย: ยังเร็วเกินไปที่จะกระโดดบนรถไฟ Python 3 หรือไม่?


1

ใน mac os ของฉันไม่ฝักใฝ่ฝ่ายใดฉันลองนี้

หลังจากนั้นให้ป้อนในตัวแปล python3 และพิมพ์:

  1. pymysql นำเข้า หากไม่มีข้อผิดพลาดการติดตั้งของคุณก็โอเค สำหรับการตรวจสอบการเขียนสคริปต์เพื่อเชื่อมต่อกับ mysql ด้วยแบบฟอร์มนี้:

  2. # สคริปต์ง่าย ๆ สำหรับการนำเข้าการเชื่อมต่อ MySQL pymysql db = pymysql.connect (host = "localhost", user = "root", passwd = "* ", db =" biblioteca ") #Sure นี่เป็นข้อมูลสำหรับ db ของฉัน # ปิดการเชื่อมต่อ db.close () *

ตั้งชื่อ ("ตัวอย่าง" con.py) และบันทึกไว้บนเดสก์ท็อป ใน Terminal type "cd desktop" จากนั้น $ python con.py หากไม่มีข้อผิดพลาดแสดงว่าคุณเชื่อมต่อกับเซิร์ฟเวอร์ MySQL โชคดี!


0

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

ฉันได้ติดตั้ง pip บน windows 7 ของฉันด้วย python 3.3 เพียงแค่ติดตั้ง pip cymysql

(คุณไม่ต้องการงูใหญ่) รวดเร็วและไม่เจ็บปวด


0

สิ่งนี้ไม่ได้ตอบคำถามเดิมของฉันอย่างเต็มที่ แต่ฉันคิดว่ามันสำคัญที่จะให้ทุกคนรู้ว่าฉันทำอะไรและทำไม

ฉันเลือกที่จะใช้ python 2.7 ต่อไปแทน python 3 เนื่องจากความแพร่หลายของ 2.7 ตัวอย่างและโมดูลบนเว็บโดยทั่วไป

ตอนนี้ฉันใช้ทั้ง mysqldb และ mysql.connector เพื่อเชื่อมต่อกับ MySQL ใน Python 2.7 ทั้งดีและทำงานได้ดี ฉันคิดว่า mysql.connector นั้นดีกว่าในระยะยาว


ฉันอยากรู้ว่าคุณยังใช้ Python 2.7 อยู่หรือเปล่า โดยทั่วไปฉันคิดว่ามันสำคัญมากที่จะต้องเปลี่ยนไปใช้ Python 3 และฉันรู้สึกประหลาดใจที่เห็นโปรแกรมเมอร์จำนวนมากเลือกใช้ Python 2.7 สำหรับโครงการใหม่ สิ่งต่าง ๆ ทำงานอย่างไร
vy32

@ vy32 ฉันคิดว่าคุณอาจประหลาดใจน้อยลงโดยนักพัฒนาเลือก py27 ถ้าคุณพิจารณาว่าเซิร์ฟเวอร์ OS หลายตัวไม่รองรับ Python โดยตรง 3 Red Hat Enterprise Linux ยังคงรวมอยู่กับ Python 2.6จนถึงเวอร์ชันล่าสุดและแม้แต่รุ่นเดียวเท่านั้น มี py27
coredumperror

อีกเหตุผลหนึ่งที่ใช้ python 2.7 คือ Maya (ซึ่งรองรับ python) ใช้ 2.7 ภายใน BTW ... หากคุณต้องการเชื่อมต่อกับ MySQL ผ่าน python ใน Maya ... ให้ใช้ตัวเชื่อมต่อ python mysql บริสุทธิ์
panofish

0

ฉันใช้ cymysql กับ python3 บนราสเบอร์รี่ pi ฉันเพิ่งติดตั้งโดย: sudo pip3 ติดตั้ง cython sudo pip3 ติดตั้ง cymysql โดยที่ cython ไม่จำเป็น แต่ควรทำให้ cymysql เร็วขึ้น

จนถึงตอนนี้มันใช้งานได้อย่างมีเสน่ห์และคล้ายกับ MySQLdb มาก


0

นี่คือแบบฝึกหัดสั้น ๆ เกี่ยวกับวิธีการให้ Python 3.7 ทำงานกับ Mysql
ขอบคุณทุกคนที่ฉันได้รับคำตอบสำหรับคำถามของฉัน
- หวังว่านี่จะช่วยให้ใครซักคนในวันหนึ่ง
-------------------------------------------------- -
ระบบของฉัน:
รุ่น Windows: Pro 64 บิต

สิ่งที่ต้องมี .. ดาวน์โหลดและติดตั้งสิ่งเหล่านี้ก่อน ...
1. ดาวน์โหลด Xampp ..
https://www.apachefriends.org/download.html
2. ดาวน์โหลด Python
https://www.python.org/downloads/windows/

- ------------
// วิธีการ
--------------
ติดตั้ง xampp ก่อนหลังจากติดตั้งเสร็จ - ติดตั้ง Python 3.7
เมื่อติดตั้งเสร็จแล้วทั้งสอง - รีบูตระบบ windows ของคุณ
ตอนนี้เริ่มต้น xampp และจากแผงควบคุม - เริ่มเซิร์ฟเวอร์ mysql
ยืนยันเวอร์ชันโดยเปิด CMD และในประเภทเทอร์มินัล

c:\>cd c:\xampp\mysql\bin

c:\xampp\mysql\bin>mysql -h localhost -v
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.1.21-MariaDB mariadb.org binary distribution

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

นี่คือการตรวจสอบรุ่นของ MySQL

c:\xampp\mysql\bin>python
Python 3.7.0b3 (v3.7.0b3:4e7efa9c6f, Mar 29 2018, 18:42:04) [MSC v.1913 64 bit (AMD64)] on win32

นี่คือการตรวจสอบเวอร์ชั่นของ Python
ตอนนี้ทั้งคู่ได้รับการยืนยันแล้วพิมพ์ต่อไปนี้ลงใน CMD ...

c:\xampp\mysql\bin>pip install pymysql

หลังจากการติดตั้ง pymysql เสร็จสมบูรณ์
สร้างไฟล์ใหม่ชื่อ "testconn.py" บนเดสก์ท็อปของคุณหรือที่ไหนก็ได้เพื่อการเข้าถึงที่รวดเร็ว
เปิดไฟล์นี้ด้วยประเสริฐหรือโปรแกรมแก้ไขข้อความอื่นแล้วใส่ลงไป
อย่าลืมเปลี่ยนการตั้งค่าเพื่อสะท้อนฐานข้อมูลของคุณ

#!/usr/bin/python
import pymysql
pymysql.install_as_MySQLdb() 

import MySQLdb
db = MySQLdb.connect(user="yourusernamehere",passwd="yourpasswordhere",host="yourhosthere",db="yourdatabasehere")
cursor = db.cursor()
cursor.execute("SELECT * from yourmysqltablehere")
data=cursor.fetchall()
for row in data :
    print (row)
db.close()

ตอนนี้อยู่ในประเภท CMD ของคุณ

c:\Desktop>testconn.py

และนั่นคือ ... ตอนนี้คุณเชื่อมต่ออย่างเต็มที่จากสคริปต์ไพ ธ อนกับ mysql ...
เพลิดเพลิน ...


0

นำเข้า pymysql

เปิดการเชื่อมต่อฐานข้อมูล

db = pymysql.connect ("localhost", "root", "", "ornament")

เตรียมวัตถุเคอร์เซอร์โดยใช้เคอร์เซอร์ () วิธีการ

cursor = db.cursor ()

sql = "เลือก * จากรายการ"

cursor.execute (SQL)

ดึงข้อมูลแถวทั้งหมดในรายการของรายการ

results = cursor.fetchall () สำหรับแถวในผลลัพธ์: item_title = row [1] comment = row [2] print ("ชื่อของรายการต่อไปนี้ =% s, ความคิดเห็นมีดังต่อไปนี้ =% s"% \ (item_title, comment))

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.