मैं पायथन में एक MySQL डाटाबेस से कैसे जुड़ सकता हूं?


1162

मैं एक अजगर कार्यक्रम का उपयोग करके एक MySQL डेटाबेस से कैसे जुड़ सकता हूं?


44
यहाँ अधिकांश उत्तर MySQLdb पुस्तकालय स्थापित करने पर ध्यान केंद्रित करते हैं, मैं MySQL / Oracle द्वारा उपलब्ध कराए गए MySQL कनेक्टर / पायथन के लिए वास्तव में सुझाव
दूंगा

8
ओरेकल के कनेक्टर / पायथन का उपयोग करने में समस्या यह है कि इसमें सूक्ष्म कीड़े और अन्य एकीकरण मुद्दे हैं। इसे स्थापित करना आसान है, लेकिन लगभग सभी वास्तविक दुनिया के उपयोग के मामलों के लिए काम करना असंभव है, जिनके लिए मैंने कोशिश की है। इसलिए मैं हमेशा MySQLdb की सलाह देता हूं।
जो सी।

7
@ Mr.Napik मैं उपयोग कर रहा हूं pymysqlक्योंकि यह इस तुलना के अनुसार शुद्ध मुक्त पायथन है ।
सेस टिम्मरमैन

जवाबों:


1245

तीन चरणों में MYSQL को पायथन 2 से जोड़ना

1 - सेटिंग

कुछ भी करने से पहले आपको एक MySQL ड्राइवर स्थापित करना होगा। PHP के विपरीत, केवल SQLite ड्राइवर डिफ़ॉल्ट रूप से पायथन के साथ स्थापित होता है। ऐसा करने के लिए सबसे अधिक उपयोग किया जाने वाला पैकेज MySQLdb है लेकिन इसे easy_install का उपयोग करके इंस्टॉल करना कठिन है। कृपया ध्यान दें कि MySQLdb केवल पायथन 2 का समर्थन करता है।

विंडोज उपयोगकर्ता के लिए, आप MySQLdb का एक exe प्राप्त कर सकते हैं ।

लिनक्स के लिए, यह एक आकस्मिक पैकेज (अजगर-मायस्कल्ड) है। (आप डाउनलोड करने के लिए कमांड लाइन में sudo apt-get install python-mysqldbडेबियन आधारित डिस्ट्रोस के लिए ), yum install MySQL-python(आरपीएम-आधारित के लिए), या dnf install python-mysql(आधुनिक फेडोरा डिस्ट्रो के लिए) का उपयोग कर सकते हैं।

Mac के लिए, आप Macport का उपयोग करके MySQLdb को इंस्टॉल कर सकते हैं ।

2 - उपयोग

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

फिर यह किसी अन्य पैकेज का उपयोग करने जैसा है:

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

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

3 - अधिक उन्नत उपयोग

एक बार जब आप यह जान जाते हैं कि यह कैसे काम करता है, तो आप SQL लिखने से बचने के लिए ORM का उपयोग कर सकते हैं और अपनी तालिकाओं में हेरफेर कर सकते हैं क्योंकि वे पायथन ऑब्जेक्ट्स थे। पायथन समुदाय में सबसे प्रसिद्ध ORM SQLAlchemy है

मैं आपको इसका उपयोग करने की दृढ़ता से सलाह देता हूं: आपका जीवन बहुत आसान होने जा रहा है।

मैंने हाल ही में पायथन दुनिया में एक और गहना की खोज की: peewee । यह एक बहुत लाइट ओआरएम है, वास्तव में आसान है और फिर सेटअप करने के लिए तेज़ है। यह छोटी परियोजनाओं के लिए मेरा दिन बनाता है या अकेले ऐप्स को खड़ा करता है, जहां SQLAlchemy या Django जैसे बड़े टूल का उपयोग किया जाता है:

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

यह उदाहरण बॉक्स से बाहर काम करता है। Peewee ( pip install peewee) होने के अलावा कुछ भी आवश्यक नहीं है।


46
ख़ुशी आपको पेवई पसंद है !! मैंने MySQL के लिए समर्थन और साथ ही इसके साथ एकीकरण पर कुछ प्रलेखन जोड़ा है। हैप्पी हैकिंग!
कोलीफर

14
ध्यान दें, यह लिखते समय, MySQLdb Python 3 का समर्थन नहीं करता है। स्रोत पृष्ठ कहता है कि "Python 3 समर्थन जल्द ही आ रहा है", लेकिन 2012-10-08 से इसे अपडेट नहीं किया गया है। Python 3 के लिए PyMySQL और oursql है
पौल

8
यह भी ध्यान दें कि निम्नलिखित आवश्यक है:pip install MySQL-python
बेन क्रोहर्स्ट

5
यह उत्तर एक गैर-मानक पोर्ट पर बाहरी सर्वर के उदाहरण कनेक्शन के साथ अधिक सहायक होगा, यह दिखाने के लिए कि यह कैसे करना है। लोकलहोस्ट कहना सामान्य तरीका है इसे बकवास करना।
एंथनी

3
Peewee ने डिफ़ॉल्ट व्यवहार को बदल दिया है और डिफ़ॉल्ट रूप से स्वतः पूर्णता का उपयोग नहीं करता है। यहां तक ​​कि डीबी ड्राइवर की स्थिति भी अब बदल गई है। प्रश्न को अद्यतन करने की आवश्यकता है, लेकिन मेरे कुछ उत्तरों पर संपादन के दुरुपयोग के बाद से, मैं उन्हें अब संपादित नहीं करता।
ई-सतीस

189

यहाँ यह करने के लिए एक ही रास्ता है, का उपयोग कर MySQLdb है, जो केवल अजगर 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()

यहाँ संदर्भ


4
क्या इस उदाहरण में कुछ करने की आवश्यकता है क्योंकि आप डेटाबेस को संशोधित नहीं कर रहे हैं?
sumanth232

3
BEWARE - इस मॉड्यूल में कनेक्शन पर कोई
टाइमज़ोन

यह मेरी साझा होस्टिंग पर काम नहीं कर रहा है। यह कहते हुए No module named MySQLdb। साझा होस्टिंग पर मैं अजगर के साथ mysql का उपयोग कैसे कर सकता हूं। कोई विकल्प?
भावेश गंगानी

@ भावेशगंगानी आपको अपने मेजबान से संपर्क करने और यह पूछने की आवश्यकता होगी कि पायथन पुस्तकालय वे क्यों समर्थन करते हैं। यदि वे पीपीआई का समर्थन करते हैं, तो आप हमेशा पैकेज को लोड कर सकते हैं जब आपकी तैनाती होती है।
जॉर्ज स्टॉकर

1
दिलचस्प बात यह है कि भले ही डॉक्स का कहना है कि यह केवल अजगर 2 के साथ काम करता है, लेकिन यह मेरे लिए अजगर 3 के साथ काम करने लगता है
lucidbrot

122

Oracle (MySQL) अब एक शुद्ध पायथन कनेक्टर का समर्थन करता है। इसका मतलब है कि कोई बायनेरिज़ स्थापित करने के लिए नहीं: यह सिर्फ एक पायथन लाइब्रेरी है। इसे "कनेक्टर / पायथन" कहा जाता है।

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


1
क्या यह mysqldb का उपयोग करने से अधिक तेज़ है?
alwbtc

8
हाँ यही है। इसके अलावा, यह MySQLdb की तुलना में कम परेशानी है और एपीआई मेरी राय में बेहतर है। इसका उत्तर होना चाहिए।
एंथनी

1
अजगर के आधिकारिक mysql कनेक्टर का उपयोग समय जीतने का सबसे अच्छा तरीका है
अनस

2
@ J0hnG4lt आप लॉगिन फॉर्म के नीचे "नो थैंक्यू, बस माय डाउनलोड" शुरू कर सकते हैं (जो वास्तव में अनिवार्य लगता है, लेकिन ऐसा नहीं है)।
कॉमफ्रीक

6
@ कॉम महान। यह कैसे बेहतर है? क्या हम "विंडोज वर्कफ़्लो" को लागू करना बंद कर सकते हैं। पैकेज प्रबंधन मौजूद है।
J0hnG4lt

119

यदि आपको MySQLdb की आवश्यकता नहीं है, लेकिन किसी भी लाइब्रेरी को स्वीकार करेंगे, तो मैं बहुत, MySQL से MySQL कनेक्टर / पायथन की सिफारिश करूंगा: http://dev.mysql.com/downloads/connector/python/

यह एक पैकेज (लगभग 110k), शुद्ध पायथन है, इसलिए यह सिस्टम स्वतंत्र है, और स्थापित करने के लिए मृत सरल है। आप बस डाउनलोड करें, डबल-क्लिक करें, लाइसेंस समझौते की पुष्टि करें और जाएं। Xcode, MacPorts, संकलन, पुनः आरंभ करने की कोई आवश्यकता नहीं है ...

फिर आप जैसे कनेक्ट करते हैं:

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
इतना आसान नहीं जितना आप दावा करते हैं। जब मैंने आरपीएम स्थापित करने की कोशिश की तो मुझे अपने RPM से निर्भरता के कुछ मुद्दे मिले (FileDigests और PayloadIsXz): 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
मैं इस लाइब्रेरी को पसंद करता था, लेकिन यह अब PyPi पर आधिकारिक रूप से समर्थित नहीं है। जब से मैं MySQLdb में स्थानांतरित हुआ हूं।
स्टीवन मर्कटांटे

2
@ शब्द: अब PyPi पर आधिकारिक रूप से समर्थित नहीं है? क्या आपके पास इसके लिए कोई स्रोत है?
मेसा

7
pip install mysql-connector-pythonभी चलेगा। मैं नहीं देखता कि यह कहाँ कहता है कि PyPi पर समर्थित नहीं है? यदि आपके पास अपने सिस्टम पर gcc / C कंपाइलर तक पहुँच नहीं है, और इसलिए इसे स्थापित नहीं किया जा सकता है तो बढ़िया है mysqldb
decvalts

7
7 नवंबर 2016 तक, pip search mysql-connectorपैकेज का नाम खोजने के लिए पाइप का पैकेज सिर्फ mysql-कनेक्टर है । जवाब देने के लिए यहाँ से: stackoverflow.com/a/22829966/2048266
nommer

117

MySQLDb का उपयोग करना बंद करें यदि आप mysql हेडर को केवल अजगर से एक्सेस करने से बचना चाहते हैं।

Pymysql का प्रयोग करें । यह सब कुछ MySQLDb करता है, लेकिन यह शुद्ध रूप से पायथन में NO बाहरी निर्भरता के साथ लागू किया गया था । यह सभी ऑपरेटिंग सिस्टम पर इंस्टॉलेशन प्रक्रिया को सुसंगत और आसान बनाता है। pymysqlMySQLDb और IMHO के लिए प्रतिस्थापन में एक गिरावट है, कभी भी कुछ के लिए MySQLDb का उपयोग करने का कोई कारण नहीं है ... कभी नहीं! -PTSD from installing MySQLDb on Mac OSX and *Nix systems , लेकिन यह सिर्फ मुझे है।

स्थापना

pip install pymysql

यही है ... आप खेलने के लिए तैयार हैं।

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

ALSO - मौजूदा और पारदर्शी रूप से मौजूदा कोड में MySQLdb को बदलें

यदि आपके पास मौजूदा कोड है जो MySQLdb का उपयोग करता है, तो आप इस सरल प्रक्रिया का उपयोग करके आसानी से इसे pymysql से बदल सकते हैं:

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

MySQLdb के बाद के सभी संदर्भ पारदर्शी रूप से pymysql का उपयोग करेंगे।


3
"ऑलवेज" थोड़ा मजबूत है ... पेवी या स्क्वैल्सीमी में क्या गलत है? भले ही वे ORM पुस्तकालयों के रूप में मौजूद हों, वे अभी भी उतने ही उपयोगी हैं
OneCricketeer

4
नहीं, मुझे नहीं लगता कि यह बिल्कुल मजबूत है। MySQLDb या PyMysql का उपयोग करने के विकल्प को देखते हुए मुझे लगता है कि PyMysql को चुनना एक बिना दिमाग वाला है क्योंकि यह बिना किसी निर्भरता के साथ एक साधारण पाइप स्थापित है, जबकि MySQLDb को काम करने के लिए आपके OS प्लेटफ़ॉर्म पर mysql डेवलपमेंट हैडर फ़ाइलों को स्थापित करने की आवश्यकता होती है। SQLAlchemy क्योंकि यह अभी भी एक मॉड्यूल PyMysql, MySQLDb, CyMySQL आदि जैसे mysql से बात कर सकते लपेट करने की जरूरत है इस में शामिल नहीं किया जाता Peewee लग रहा है दिलचस्प हालांकि, मुझे लगता है कि बाहर की जाँच करेंगे
OkezieE

2
@ क्रिकेट_007 पेवे और स्क्वैल्केमली अपने स्वयं के डीबी कनेक्टर को लागू नहीं करते हैं, वे
MySQLdb

25

MySQLdb का उपयोग करने का प्रयास करें । MySQLdb केवल पायथन 2 का समर्थन करता है।

यहाँ पेज बनाने का तरीका बताया गया है: http://www.kitebird.com/articles/pydbapi.html


पृष्ठ से:

# 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 - इस मॉड्यूल में कनेक्शन पर कोई
टाइमज़ोन

1
@kommradHomer क्या आप कृपया विस्तार से बता सकते हैं?
पाइडरमैन

1
@kommradHomer - आप (या अन्य - विशेष रूप से कनेक्ट करते समय localhost) के लिए टाइमज़ोन क्या मायने रखता है ?
वॉरन

1
@warren नहीं, मैं अपने मामले में लोकलहोस्ट को कनेक्ट नहीं कर रहा था
kommradHomer

1
मैं कैसे पता लगा सकता हूं कि डेटाबेस से जुड़ने के लिए कौन सी लाइब्रेरी स्थापित है?
२३

18

Db ड्राइवर के रूप में, oursql भी है । उस लिंक पर सूचीबद्ध कुछ कारण, जो कहते हैं कि हमारा बेहतर क्यों है:

  • oursql में वास्तविक पैरामीटर है, जो SQL और डेटा को MySQL को पूरी तरह से अलग से भेज रहा है।
  • oursql क्लाइंट में सब कुछ आवश्यक होने के बजाय डेटाबेस में पाठ या बाइनरी डेटा को डेटाबेस में प्रवाहित करने और डेटाबेस से बाहर ले जाने की अनुमति देता है।
  • oursql दोनों lazily पंक्तियाँ सम्मिलित कर सकते हैं और lazily पंक्तियाँ ला सकते हैं।
  • oursql में डिफ़ॉल्ट रूप से यूनिकोड समर्थन है।
  • oursl 2.7 के माध्यम से 2.7 के माध्यम से अजगर 2.4 का समर्थन करता है। 2.6 (पीईपी 218 देखें) पर और 2.7 पर पूरी तरह से विफल हुए बिना (पीईपी 328 देखें) बिना किसी डिप्रेशन चेतावनी के।
  • oursql देशी रूप से अजगर 3.x पर चलता है।

तो हमारे साथ mysql से कैसे जुड़ें?

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]

दस्तावेज में ट्यूटोरियल सुंदर सभ्य है।

और ORM SQLAlchemy के लिए निश्चित रूप से एक अच्छा विकल्प है, जैसा कि पहले से ही अन्य उत्तरों में बताया गया है।


4
मुझे समझ में नहीं आता 'देशी 3. अजगर पर चलता है'। मैंने इसे स्थापित करने का प्रयास किया और सेटअप-थ्रो बम बाहर निकल गया क्योंकि यह पायथन 3 संगत प्रिंट कॉल का भी उपयोग नहीं करता है। बहुत अच्छा लग रहा था जब तक मैं वास्तव में यह कोशिश की।
ओटाक्यूकोड

15

Mysql कनेक्टर स्थापित करने के लिए अपने टर्मिनल में यह कमांड चलाएँ:

pip install mysql-connector-python

और MySQL से कनेक्ट करने के लिए अपने अजगर संपादक में इसे चलाएं:

import mysql.connector

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

MySQL कमांड को निष्पादित करने के नमूने (आपके पायथन एडियोर में):

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

अधिक आदेशों के लिए: https://www.w3schools.com/python/python_mysql_getstarted.asp


क्या आप इसका उत्तर दे सकते हैं ?? यह mysql-connectorकेवल से संबंधित है । stackoverflow.com/questions/59405740/…

1
कुछ लोगों ने पहले ही आपके प्रश्न का उत्तर दे दिया। आप mydb.commit()मेज पर मूल्यों को सम्मिलित करने के बाद बस चलाना भूल गए
शेरज़ोड

13

SQLAlchemy


SQLAlchemy पाइथन SQL टूलकिट और ऑब्जेक्ट रिलेशनल मैपर है जो एप्लिकेशन डेवलपर्स को SQL की पूर्ण शक्ति और लचीलापन देता है। SQLAlchemy अच्छी तरह से ज्ञात एंटरप्राइज़-स्तरीय दृढ़ता पैटर्न का एक पूर्ण सूट प्रदान करता है, जो कुशल और उच्च प्रदर्शन वाले डेटाबेस एक्सेस के लिए डिज़ाइन किया गया है, जो एक सरल और पायथोनिक डोमेन भाषा में अनुकूलित है।

स्थापना

pip install sqlalchemy

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

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

उपरोक्त सभी उत्तरों के बावजूद, यदि आप किसी विशिष्ट डेटाबेस से जुड़ना नहीं चाहते हैं, उदाहरण के लिए, यदि आप डेटाबेस को अभी भी बनाना चाहते हैं (!), तो आप connection.select_db(database)निम्नानुसार प्रदर्शित कर सकते हैं ।

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 सीधा रास्ता है। आपको कनेक्शन पर SQL क्वेरी निष्पादित करने के लिए मिलता है। अवधि।

मेरा पसंदीदा तरीका, जो कि पायथोनिक भी है, इसके बजाय शक्तिशाली SQLAlchemy का उपयोग करना है। यहाँ एक क्वेरी संबंधित ट्यूटोरियल है, और यहाँ SQLALchemy की ORM क्षमताओं पर एक ट्यूटोरियल है ।


1
लिंक मृत हैं, क्या आप उस पर गौर कर सकते हैं और इसे सही लिंक के साथ अपडेट कर सकते हैं?
नवीन विजय

6

Python3.6 के लिए मुझे दो ड्राइवर मिले: pymysql और mysqlclient। मैंने उनके बीच प्रदर्शन का परीक्षण किया और परिणाम मिला: mysqlclient तेज है।

नीचे मेरी परीक्षा प्रक्रिया है (समय बीतने का विश्लेषण करने के लिए अजगर लिबास को स्थापित करने की आवश्यकता है)

कच्चे sql: select * from FOO;

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

यहाँ एक pymysql प्रोफाइल है: यहां छवि विवरण दर्ज करें


mysqlclient (0.4s)

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

यहाँ एक mysqlclient प्रोफाइल है: यहां छवि विवरण दर्ज करें

तो, ऐसा लगता है कि mysqlclient pymysql की तुलना में बहुत तेज है


6

MySQL को python से कनेक्ट करने का सबसे अच्छा तरीका MySQL कनेक्टर / पायथन का उपयोग करना है क्योंकि यह Python के साथ काम करने के लिए MySQL के लिए आधिकारिक Oracle ड्राइवर है और यह Python 3 और Python 2 दोनों के साथ काम करता है।

MySQL को जोड़ने के लिए नीचे दिए गए चरणों का पालन करें

  1. पाइप का उपयोग करके कनेक्टर स्थापित करें

    pip install mysql-connector-python

या आप https://dev.mysql.com/downloads/connector/python/ से इंस्टॉलर डाउनलोड कर सकते हैं

  1. connect()MySQL.l कनेक्ट करने के लिए mysql कनेक्टर अजगर की विधि का उपयोग करें। विधि के लिए आवश्यक तर्क को पार करें connect()। यानी होस्ट, उपयोगकर्ता नाम, पासवर्ड और डेटाबेस का नाम।

  2. SQL क्वेरी निष्पादित करने के लिए विधि cursorद्वारा लौटाए गए कनेक्शन ऑब्जेक्ट से ऑब्जेक्ट बनाएं connect()

  3. अपना काम पूरा होने के बाद कनेक्शन बंद करें।

उदाहरण :

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

संदर्भ - https://pynative.com/python-mysql-database-connection/

MySQL कनेक्टर पायथन के महत्वपूर्ण एपीआई

  • डीएमएल संचालन के लिए - उपयोग करें cursor.execute()औरcursor.executemany() क्वेरी चलाने के लिए। और इसके बाद connection.commit()डीबी के लिए अपने परिवर्तनों को जारी रखने के लिए उपयोग करें

  • डेटा लाने के लिए - उपयोग cursor.execute()क्वेरी चलाने के लिए और cursor.fetchall(), cursor.fetchone(), cursor.fetchmany(SIZE)डेटा प्राप्त करने का


आप * से जुड़े ...
जॉन फोर्ब्स

5

उपरोक्त उत्तर में केवल एक संशोधन। बस अजगर के लिए mysql स्थापित करने के लिए इस कमांड को चलाएं

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

याद है! यह संवेदनशील मामला है।


मैंने yum install के माध्यम से MySQL-python स्थापित किया। स्थापना पूर्ण थी, लेकिन मैं MySQLdb मॉड्यूल आयात नहीं कर सकता। यह कहते हैं कि ऐसा कोई मॉड्यूल नहीं है। किसी भी विचार ऐसा क्यों है?
user3527975

यह स्पष्ट नहीं है कि जब आप "उत्तर से ऊपर" कहते हैं, तो आपको कौन सा उत्तर देना है। कृपया अपना उत्तर अपने आप में पूर्ण करें। यदि आप अन्य उत्तरों को संदर्भित करना चाहते हैं, तो कृपया विशिष्ट उत्तर के लिए लिंक करें।
फ्लिम

5

mysqlclient सबसे अच्छा है क्योंकि अन्य केवल अजगर के विशिष्ट संस्करणों को समर्थन प्रदान करते हैं

 pip install mysqlclient

उदाहरण कोड

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

देख https://github.com/PyMySQL/mysqlclient-python


+1 अजगर के लिए सबसे तेज़ समाधान का प्रस्ताव करने के लिए 3. हालाँकि, mysql.connectorऔर _mysqlदोनों को एक आयात त्रुटि दें (हालाँकि दूसरा विकल्प प्रलेखन के अनुसार काम करना चाहिए)। import MySQLdbकाम करता है, और फिरMySQLdb.connect...
सुजाना १६'१

5

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

यहाँ उसका कोड है:

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

यहाँ महत्वपूर्ण बात है कोशिश करो और अंत में खंड। यह हमेशा के लिए कनेक्शन की अनुमति देता है बंद , चाहे कोड के कर्सर / sqlstatement भाग में क्या हो। बहुत सारे सक्रिय कनेक्शन DBLoadNoCPU को स्पाइक के कारण बनाते हैं और एक db सर्वर को क्रैश कर सकते हैं।

मुझे आशा है कि यह चेतावनी सर्वर और अंततः नौकरियों को बचाने में मदद करती है! : डी


3

स्टॉर्म पर भी नज़र डालें । यह एक सरल एसक्यूएल मैपिंग टूल है जो आपको क्वेरी लिखे बिना एसक्यूएल प्रविष्टियों को आसानी से संपादित करने और बनाने की अनुमति देता है।

ये रहा एक सरल उदाहरण:

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

उपयोग खोजने और ऑब्जेक्ट करने के लिए:

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

प्राथमिक कुंजी के साथ खोजें:

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

अधिक जानकारी के लिए ट्यूटोरियल देखें ।


2

यह मैसकल डीबी कनेक्शन है

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

पहले ड्राइवर को स्थापित करें

pip install MySQL-python   

फिर एक बुनियादी कोड इस तरह से जाता है:

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

आप इस तरह से अपने python कोड को mysql से जोड़ सकते हैं।

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

cursor = db.cursor()

1

पहले ड्राइवर (उबंटू) स्थापित करें

  • sudo apt-get install अजगर-पाइप

  • sudo pip इंस्टॉल -U पाइप

  • sudo apt-get install अजगर-देव libmysqlclient-dev

  • sudo apt-get install MySQL-python

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

अजगर 3.3 के लिए

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

मैंने अपने विंडोज 7 पर पाइप स्थापित किया है, बस पाइप स्थापित करें cymysql

(आप साइथन की जरूरत नहीं है) जल्दी और दर्द रहित


3
आप SO पर एक नया प्रश्न बना सकते हैं और यहां एक लिंक के साथ टिप्पणी कर सकते हैं।
लाजिक

-1

सबसे पहले, https://dev.mysql.com/downloads/connector/bthth/ से अजगर-Mysql कनेक्टर स्थापित करें

पायथन कंसोल पर दर्ज करें:

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

1
प्रश्न थोड़ा बहुत व्यापक था, लेकिन यह उत्तर थोड़ा संकीर्ण लगता है (कम से कम इस मायने में कि मॉड्यूल को स्थापित करना और आयात करना अकेले नहीं होगा)। यह भी लगता है कि शेल और अजगर बिना किसी स्पष्टीकरण या संकेत के एकल कोड ब्लॉक में इंटरमिक्स किया गया था कि क्या कहाँ जाता है और क्या करता है।
Ondrej K.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.