MySQLdb, mysqlclient और MySQL कनेक्टर / पायथन में क्या अंतर है?


95

इसलिए मैं अजगर के साथ कुछ डेटाबेस अपडेट करने की कोशिश कर रहा हूं और पूरे देव वातावरण की स्थापना करते हुए, मैं इन तीन चीजों के साथ आया, जिससे मुझे चक्कर आ गया।

  1. वहाँ MySQLdb है

  2. वहाँ mysqlclient है

  3. और फिर एक mysql कनेक्टर अजगर है

उनमें से प्रत्येक क्या है, अंतर और उन्हें कहां उपयोग करना है? धन्यवाद


1
अधिकांश भाषाओं में परिष्कार, समर्थन और गुणवत्ता के स्तर के कई डेटाबेस एडेप्टर परतें हैं।
tadman

mysqlclient python3.3 + समर्थन के साथ MySQLdb का एक कांटा संस्करण है, और mysql कनेक्टर mysql का आधिकारिक मॉड्यूल है।
वारुंगमैन

3
हमारे पास pymysql
Cenk Alti

जवाबों:


83

MySQLdb C मॉड्यूल के चारों ओर एक पतली अजगर आवरण है जो MySQL डेटाबेस के लिए API को लागू करता है।

कुछ समय पहले इस्तेमाल किया गया रैपर का MySQLDb1 संस्करण था और अब इसे एक विरासत माना जाता है। MySQLDb1 बग फिक्स और Python3 समर्थन के साथ MySQLDb2 के लिए विकसित करना शुरू कर दिया है , एक MySQLDb1 को कांटा गया था और यहाँ कैसे mysqlclient दिखाई दिया, बगफिक्स और Python3 समर्थन के साथ। ऊपर उठो, तो अब हमारे पास MySQLDb2 है जो उत्पादन उपयोग के लिए तैयार नहीं है, एक पुराने ड्राइवर के रूप में MySQLDb1 और एक समुदाय ने बग फिक्स और पायथन 3 समर्थन के साथ mysqlclient का समर्थन किया।

अब, उस गड़बड़ी को हल करने के लिए, MySQL MySQL एडॉप्टर - mysql कनेक्टर , एक ऑल-इन पायथन मॉड्यूल का अपना संस्करण प्रदान करता है जो MySQL API का उपयोग करता है जिसमें कोई C मॉड्यूल निर्भरता नहीं होती है और केवल मानक python मॉड्यूल का उपयोग किया जाता है।

तो अब सवाल नीचे आता है: mysqlclient बनाम mysql कनेक्टर।

मेरे लिए, मैं आधिकारिक तौर पर समर्थित पुस्तकालय के साथ जाऊंगा, लेकिन mysqlclientसाथ ही साथ एक अच्छा विकल्प होना चाहिए। उन दोनों को फ़िक्स और नए फीचर्स के साथ सक्रिय रूप से अपडेट किया जा रहा है जिसे आप अंतिम दिनों में सक्रिय कमिट द्वारा देख सकते हैं।

नोट: मुझे उनके साथ बहुत अनुभव नहीं था, इसलिए ऐसे मामले हो सकते हैं जब एक या दूसरे आपकी आवश्यकताओं के अनुरूप नहीं होते हैं। दोनों पुस्तकालय PEP-249 मानक का पालन करते हैं जिसका अर्थ है कि आपको हर जगह कम से कम आधार कार्यक्षमता के साथ ठीक होना चाहिए।

स्थापना और निर्भरता

  • mysqlclient

सी रैपर के कांटे के रूप में इसे MySQL के साथ काम करने के लिए C मॉड्यूल की आवश्यकता होती है जो इन एक्सटेंशन को बनाने के लिए अजगर हेडर फाइलें जोड़ता है (पायथन-देव पढ़ें)। स्थापना आपके द्वारा उपयोग किए जाने वाले सिस्टम पर निर्भर करती है, बस यह सुनिश्चित करें कि आप पैकेज नामों से अवगत हैं और उन्हें स्थापित कर सकते हैं।


72

अजगर के लिए आप MySQL एडेप्टर हैं जो वर्तमान में बनाए हुए हैं:

  • mysqlclient- CPython के लिए अब तक का सबसे तेज MySQL कनेक्टर। की आवश्यकता हैmysql-connector-cकाम करने के C लाइब्रेरी की ।

  • PyMySQL- प्योर पायथन MySQL क्लाइंट। दोनों के अनुरक्षक के अनुसार mysqlclientऔरPyMySQL , आपको उपयोग करना चाहिए PyMySQLयदि:

    • आप libmysqlclientकिसी कारण से उपयोग नहीं कर सकते ।
    • आप जियोवेंट या इवेंटलेट के मंकीपैक सॉकेट का उपयोग करना चाहते हैं।
    • आप mysql प्रोटोकॉल को हैक करना नहीं चाहेंगे।
  • mysql-connector-python- ओरेकल में MySQL ग्रुप द्वारा विकसित MySQL कनेक्टर, जिसे पूरी तरह से Python में भी लिखा गया है। यह प्रदर्शन तीनों में से सबसे खराब प्रतीत होता है। इसके अलावा, कुछ लाइसेंस मुद्दों के कारण, आप इसे PyPI से डाउनलोड नहीं कर सकते हैं (लेकिन अब यह कोंडा के माध्यम से उपलब्ध है)।

मानक

निम्नलिखित बेंचमार्क के अनुसार, mysqlclientशुद्ध पायथन ग्राहकों की तुलना में तेज (कभी-कभी> 10x तेज) है।


2
ऐसा लग रहा है PyMySQLकि अभी भी अगर PyPy का उपयोग करने का रास्ता है।
राडेक

अगर आपको mysqlclient संकलन करने में समस्या है, तो आप इसे व्हील पैकेज के माध्यम से यहां बताए अनुसार स्थापित कर सकते हैं: stackoverflow.com/a/31077052/2848256
Искрен Станиславов

sqlalchemy mysqlclient का समर्थन करता है?
विशाल

4
@vishal AFAIK mysqlclientsqlalchemy द्वारा उपयोग किया जाने वाला डिफ़ॉल्ट कनेक्टर है जब आपका डेटाबेस URL से शुरू होता है mysql://...। उपयोग करने के लिए PyMySQL, अपने URL को शुरू करें mysql+pymysql://...। उपयोग करने के लिए mysql-connector-python, अपने URL को शुरू करें mysql+mysqlconnector://...। अधिक जानकारी के लिए sqlalchemy डॉक्स देखें ।
ओस्ट्रोकैच

13

उपयोगकर्ताओं द्वारा प्रदान किए गए बहुत सारे विकल्प। पार्टी करने के लिए थोड़ा लेट। लेकिन मेरे 2 सेंट pypy 3.7 संस्करण के लिए बेंचमार्किंग पर साथ है।

यदि आप तेज़ पहुँच और दोहराव की पहुँच चाहते हैं तो mysqlclient से चिपके रहें

MySQL Connector/Python: 23.096168518066406 [sec]
mysqlclient: 6.815327882766724 [sec]
PyMySQL: 24.616853952407837 [sec]
MySQL Connector/Python: 22.619106769561768 [sec]
mysqlclient: 6.607790231704712 [sec]
PyMySQL: 24.410773038864136 [sec]

पिछले बेंचमार्किंग से लूप ...

def q100k(cur):
    t = time.time()
    for _ in range(100000):
        cur.execute("SELECT 1,2,3,4,5,6")
        res = cur.fetchall()
        assert len(res) == 1
        assert res[0] == (1, 2, 3, 4, 5, 6)
    return time.time() - t
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.