Не найден модуль с именованными курсорами - PullRequest
0 голосов
/ 30 июня 2018

Я только что установил PyMySQL на свой VPS, который, похоже, не имел проблем с установкой.

Чтобы убедиться, что все работает нормально, я попытался выполнить следующий скрипт, который нашел в их документации.

Python 2.7.5 и Python 3.6.5

Server version: 10.1.34-MariaDB MariaDB Server

import pymysql.cursors

# Connect to datebase
con = pymysql.connect(host='localhost',
                    user='dbuser',
                    password='dbpass',
                    db='dbname',
                    charset='utf8mb4',
                    cursorclass=pymysql.cursor.DictCursor)

try:
    with con.cursor() as cursor:
        # Create new record
        sql = "INSERT INTO `test` (`idx`, `title`, `description`, `category`) VALUES (%s, %s, %s, %s)"
        cursor.execute(sql, (1, 'Fake Title', 'Fake description about a fake post.', 'WELLNESS'))

    with con.cursor() as cursor:
        # Read a single record
        sql = "SELECT `idx`, `title` FROM `test` WHERE `idx`=%s"
        cursor.execute(sql, ('1'))
        result = cursor.fetchone()
finally:
    with open('dbText.txt', 'w') as f:
        f.write('%s'.format(result))
        con.close()

Однако я получаю ImportError, который гласит No module found named cursors.

[root@host public_html]# python pymysql.py

Traceback (most recent call last):
    File "pymysql.py", line 1, in <module>
        import pymysql.cursors
    File "/home/bldsprt/public_html/pymysql.py", line 1, in <module>
        import pymysql.cursors
ImportError: No module named cursors

[root@host public_html]# python3.6 pymysql.py
Traceback (most recent call last):
  File "pymysql.py", line 1, in <module>
    import pymysql.cursors
  File "/home/bldsprt/public_html/pymysql.py", line 1, in <module>
    import pymysql.cursors
ModuleNotFoundError: No module named 'pymysql.cursors'; 'pymysql' is not a package

Когда я пытаюсь переустановить, это означает, что pymysql уже установлен.

[root@host public_html]# pip install pymysql
Requirement already satisfied: pymysql in /usr/local/lib/python3.6/site-packages (0.9.0)
Requirement already satisfied: cryptography in /usr/local/lib/python3.6/site-packages (from pymysql) (2.2.2)
Requirement already satisfied: idna>=2.1 in /usr/local/lib/python3.6/site-packages (from cryptography->pymysql) (2.7)
Requirement already satisfied: six>=1.4.1 in /usr/local/lib/python3.6/site-packages (from cryptography->pymysql) (1.11.0)
Requirement already satisfied: cffi>=1.7; platform_python_implementation != "PyPy" in /usr/local/lib/python3.6/site-packages (from cryptography->pymysql) (1.11.5)
Requirement already satisfied: asn1crypto>=0.21.0 in /usr/local/lib/python3.6/site-packages (from cryptography->pymysql) (0.24.0)
Requirement already satisfied: pycparser in /usr/local/lib/python3.6/site-packages (from cffi>=1.7; platform_python_implementation != "PyPy"->cryptography->pymysql) (2.18)

Нужно ли устанавливать модуль cursors отдельно?

Любая помощь будет огромной!

1 Ответ

0 голосов
/ 30 июня 2018

Эта часть трассировки стека раскрывает проблему:

    File "/home/bldsprt/public_html/pymysql.py", line 1, in <module>
          import pymysql.cursors
ImportError: No module named cursors

Вы назвали файл, который используете для тестирования "pymysql.py", поэтому Python пытается извлечь модуль курсоров из файла с одинаковыми именами. Если вы переименуете файл во что-то другое, он сможет загрузить правильный библиотечный файл, если pymysql установлен через pip2 / pip2.7 (кажется, что pip в вашей системе по умолчанию установлен на Python 3).

Кроме того, при рассмотрении самого пакета и документации я думаю, что при инициализации объекта соединения MySQL (con) он должен использовать pymysql.cursors.DictCursor (курсоры, а не курсор) для класса курсора.

...