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
example@sqldat.comzhaosong-VirtualBox:~$ 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: example@sqldat.com
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.
Ако сте намерили други причини, моля, добавете вашите коментари към тази статия, благодаря много.