ฉันจะเชื่อมต่อกับ 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.