Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

Pymysql Cursor.fetchall() / Fetchone() कोई नहीं लौटाता

PyMySQL एक अजगर पुस्तकालय है जो MySQL डेटाबेस से जुड़ सकता है। लेकिन इन दिनों जब मैं PyMySQL के माध्यम से चुनिंदा SQL कमांड को निष्पादित करता हूं, तो मैंने पाया कि निष्पादन डेटाबेस तालिका से कोई रिकॉर्ड नहीं लौटाता है, लेकिन डेटा वास्तव में डेटाबेस तालिका में मौजूद है। और जब मैं सीधे डेटाबेस में SQL कमांड चलाता हूं, तो SQL सफलतापूर्वक निष्पादित हो सकता है और तालिका डेटा सही ढंग से वापस किया जा सकता है। मेरे मामले में मैंने जो कारण पाया वह नीचे दिया गया है।

<एच3>1. SQL कमांड उद्देश्य चुनें।

नीचे दिए गए SQL कमांड का लक्ष्य मौजूद रिकॉर्ड्स की गिनती संख्या वापस करना है जिसका उपयोगकर्ता_नाम 'जेरी' है, यदि गिनती संख्या 0 से बड़ी है जिसका अर्थ है कि स्थिति के साथ रिकॉर्ड डेटाबेस तालिका में मौजूद है, तो कोड सम्मिलित नहीं होगा MySQL डेटाबेस तालिका में एक नया रिकॉर्ड। लेकिन अगर लौटाई गई गिनती संख्या 0 है, जिसका अर्थ है कि डेटा तालिका में मौजूद नहीं है, तो हम इसे MySQL डेटाबेस तालिका में सम्मिलित कर सकते हैं।

"select count(id) as count from dev2qa_example.user_account where lower(user_name) = 'jerry'"
<एच3>2. SQL के ऊपर निष्पादित कैसे करें PyMySQL का उपयोग करें।

2.1 PyMySQL लाइब्रेरी स्थापित करें।

यदि आप उपरोक्त SQL उपयोग PyMySQL को निष्पादित करना चाहते हैं, तो आपको पहले नीचे की तरह PyMySQL लाइब्रेरी को स्थापित करना होगा।

:~$ pip3 install PyMySQL
Collecting PyMySQL
  Downloading https://files.pythonhosted.org/packages/ed/39/15045ae46f2a123019aa968dfcba0396c161c20f855f11dea6796bcaae95/PyMySQL-0.9.3-py2.py3-none-any.whl (47kB)
    100% |████████████████████████████████| 51kB 152kB/s 
Installing collected packages: PyMySQL
Successfully installed PyMySQL-0.9.3
[email protected]:~$ pip3 show PyMySQL
Name: PyMySQL
Version: 0.9.3
Summary: Pure Python MySQL Driver
Home-page: https://github.com/PyMySQL/PyMySQL/
Author: yutaka.matsubara
Author-email: [email protected]
License: "MIT"
Location: /home/zhaosong/.local/lib/python3.6/site-packages
Requires: 

2.2 SQL चलाएँ PyMySQL का उपयोग करें।

अब PyMySQL मॉड्यूल आयात करें कनेक्ट करें , कर्सर अपने पायथन कोड में क्लास करें और इसके साथ उपरोक्त SQL कमांड को निष्पादित करें। आप नीचे दिया गया सोर्स कोड देख सकते हैं।

# import pymysql connect and cursors class.
from pymysql import connect, cursors

# get mysql connection object.
conn = connect(host='127.0.0.1', user='root', password='root', db='dev2qa_example', charset='utf8', cursorclass=cursors.DictCursor)

try:
    # get database cursor object.
    with conn.cursor() as cursor:
         # execute select sql command.
         row_count = cursor.execute(sql)
         print('select return row count = ' + str(row_count))
         # get the execution result and print it out.
         row = cursor.fetchall()
         print(row)
finally:
   # do not forget close mysql connection at the end of the code.
   conn.close()

जब आप उपरोक्त अजगर स्रोत कोड चलाते हैं, तो आपको कोई नहीं . मिलेगा निष्पादन परिणाम से। जब आप स्रोत कोड को डीबग करते हैं, तो आप पा सकते हैं कि यदि आप cursor.fetchall() जोड़ते हैं ग्रहण में PyDev अभिव्यक्ति cursor.fetchall() . से पहले डिबग विंडो लागू किया जाता है, तो आप row_count . देख सकते हैं मान सही परिणाम मान है (1) अभिव्यक्तियों . में मूल्य स्तंभ। लेकिन जब आप cursor.fetchall() को चलाना जारी रखते हैं फ़ंक्शन, लौटा हुआ परिणाम एक खाली सूची है।

और पंक्ति गणना row_count = cursor.execute(sql) . द्वारा दी गई है कोड भी रिकॉर्ड गिनती संख्या नहीं है जिसका उपयोगकर्ता_नाम 'जेरी' है। यह केवल निष्पादन लौटाई गई पंक्ति गणना है, यदि दो या दो से अधिक रिकॉर्ड हैं जिनका उपयोगकर्ता_नाम 'जेरी' है row_count = cursor.execute(sql) अभी भी 1 है।

कुछ जाँच-पड़ताल के बाद, मैंने पाया कि यह समस्या नीचे के परिदृश्यों में मौजूद है।

  1. उपरोक्त कोड को डिबग करने पर ही मौजूद रहें, जब मैं उपरोक्त कोड को सीधे चलाता हूं, तो परिणाम सही होता है।
  2. cursor.fetchall() की समझ में कमी फ़ंक्शन, फ़ंक्शन लागू होने के बाद अंतिम पंक्ति में चला जाएगा। और परिणाम अस्थायी चर पंक्ति में सहेजा जाएगा।
  3. यह PyMySQL या MySQL का एक बग है, जैसा कि StackOverflow विषय से संबंधित है।

यदि आपको कोई अन्य कारण मिले हैं तो कृपया इस लेख में अपनी टिप्पणी जोड़ें, बहुत-बहुत धन्यवाद।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैसकल रिकर्सन?

  2. क्या मुझे MySQL में डेटाटाइम या टाइमस्टैम्प डेटा प्रकार का उपयोग करना चाहिए?

  3. MySQL रूट उपयोगकर्ता पासवर्ड कैसे रीसेट करें

  4. MYSQL 5.7 में नेटिव JSON सपोर्ट:MYSQL में JSON डेटा टाइप के फायदे और नुकसान क्या हैं?

  5. कहां बनाम हो रहा है