PyMySQL е библиотека на python, която може да се свърже с базата данни MySQL. Но тези дни, когато изпълнявам командата select SQL през PyMySQL, открих, че изпълнението не връща никакви записи от таблицата на базата данни, но данните наистина съществуват в таблицата на базата данни. И когато стартирам SQL командата в базата данни директно, SQL може да се изпълни успешно и данните от таблицата могат да бъдат върнати правилно. По-долу е причината, която открих в моя случай.
1. Изберете Цел на SQL командата.
Целта на SQL командата по-долу е да върне броя на съществуващите записи, чието потребителско име е 'jerry', ако броят на броя е по-голям от 0, което означава, че записът с условието съществува в таблицата на базата данни, тогава кодът няма да се вмъкне нов запис в таблицата на базата данни на MySQL. Но ако върнатият брой е 0, което означава, че данните не съществуват в таблицата, тогава можем да ги вмъкнем в таблицата на базата данни на MySQL.
"select count(id) as count from dev2qa_example.user_account where lower(user_name) = 'jerry'"
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 модул свържете , курсори клас във вашия Python код и изпълнете с него горната команда select 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()
Когато стартирате горния изходен код на python, ще получите Няма от резултата от изпълнението. Когато отстраните грешки в изходния код, можете да установите, че ако добавите cursor.fetchall()
в eclipse PyDev Изрази прозорец за отстраняване на грешки преди cursor.fetchall()
се извиква, можете да видите row_count value е правилната резултатна стойност (1) в Изразите колона стойност. Но когато продължите да изпълнявате cursor.fetchall()
функция, върнатият резултат е празен списък.
И броят на редовете, върнат от row_count = cursor.execute(sql)
кодът също не е номерът на записите, чието потребителско име е „jerry“. Това е просто броят на реда, върнат при изпълнението, ако има два или повече записа, чието потребителско име е „jerry“, row_count = cursor.execute(sql)
все още е 1.
След известно разследване установих, че този проблем съществува в сценариите по-долу.
- Съществува само когато отстранявам грешки в горния код, когато стартирам директно горния код, резултатът е правилен.
- Недостатъчно разбиране на
cursor.fetchall()
функция, функцията ще се премести на последния ред след извикане. И резултатът ще бъде запазен в реда за временна променлива. - Това е грешка в PyMySQL или MySQL, както е посочено в темата StackOverflow.
Ако сте намерили други причини, моля, добавете вашите коментари към тази статия, благодаря много.