Ошибка PostgreSQL- ModuleNotFoundError: нет модуля с именем ‘psycopg2’

#python #python-3.x #psycopg2 #postgresql-9.1

#python #python-3.x #psycopg2 #postgresql-9.1

Вопрос:

Я могу подтвердить, что psycopg2 установлен (используется conda install -c anaconda psycopg2 ), но, похоже, psycopg2 не может быть импортирован в мой скрипт python, или интерпретатор не может его найти. Я также попытался установить с помощью pip3, требования выполнены, что означает, что psycopg2 уже установлен, но не могу понять, почему I script не может его импортировать. Использование Mac (OS v10.14.4)

 $ python create_tables.py
Traceback (most recent call last):
  File "create_tables.py", line 1, in <module>
    import psycopg2
ModuleNotFoundError: No module named 'psycopg2'

$ pip3 install psycopg2
Requirement already satisfied: psycopg2 in /usr/local/lib/python3.7/site-packages (2.8.2)
$ pip3 install psycopg2-binary
Requirement already satisfied: psycopg2-binary in /usr/local/lib/python3.7/site-packages (2.8.2)
python -V
Python 3.7.0
 

Есть идеи, почему это происходит?

РЕДАКТИРОВАТЬ: create_table.py

 import psycopg2
from config import config


def create_tables():
    """ create tables in the PostgreSQL database"""
    commands = (
        """
        CREATE TABLE vendors (
            vendor_id SERIAL PRIMARY KEY,
            vendor_name VARCHAR(255) NOT NULL
        )
        """,
        """ CREATE TABLE parts (
                part_id SERIAL PRIMARY KEY,
                part_name VARCHAR(255) NOT NULL
                )
        """,
        """
        CREATE TABLE part_drawings (
                part_id INTEGER PRIMARY KEY,
                file_extension VARCHAR(5) NOT NULL,
                drawing_data BYTEA NOT NULL,
                FOREIGN KEY (part_id)
                REFERENCES parts (part_id)
                ON UPDATE CASCADE ON DELETE CASCADE
        )
        """,
        """
        CREATE TABLE vendor_parts (
                vendor_id INTEGER NOT NULL,
                part_id INTEGER NOT NULL,
                PRIMARY KEY (vendor_id , part_id),
                FOREIGN KEY (vendor_id)
                    REFERENCES vendors (vendor_id)
                    ON UPDATE CASCADE ON DELETE CASCADE,
                FOREIGN KEY (part_id)
                    REFERENCES parts (part_id)
                    ON UPDATE CASCADE ON DELETE CASCADE
        )
        """)
    conn = None
    try:
        # read the connection parameters
        params = config()
        # connect to the PostgreSQL server
        conn = psycopg2.connect(**params)
        cur = conn.cursor()
        # create table one by one
        for command in commands:
            cur.execute(command)
        # close communication with the PostgreSQL database server
        cur.close()
        # commit the changes
        conn.commit()
    except (Exception, psycopg2.DatabaseError) as error:
        print(error)
    finally:
        if conn is not None:
            conn.close()


if __name__ == '__main__':
    create_tables()
 

Комментарии:

1. Не могли бы вы рассказать нам подробнее о том, чего вы пытаетесь достичь с помощью psycopg2? Pspcopg2 — это низкоуровневый адаптер базы данных, используемый ORMS; вам редко нужно импортировать его непосредственно в свои программы. Другими словами, нам может быть полезно увидеть create_tables.py .

2. Отредактированный вопрос, показывающий содержимое create_table.py

3. Хорошо… приятно видеть. Я собираюсь предложить вам изучить SQLAlchemy . Вот как построить схему . Это избавит вас от некоторых деталей более низкого уровня.

4. Если подумать, SQLAlchemy — не единственный ваш вариант ORM. Есть много других: Peewee, PonyORM, SQLObject, Tortoise ORM. Я даже видел, как ORM Django использовался за пределами Django. Любой из них сэкономит вам некоторую работу над кодированием непосредственно против psycopg2.

Ответ №1:

Да, найдено решение,

 python -m pip install psycopg2-binary 
 

делает трюк!

Комментарии:

1. Отлично, теперь вы можете либо удалить свой вопрос, либо принять свой собственный ответ!

2. Красиво и коротко, спасибо

Ответ №2:

Используя Python3, команда:

 python3 -m pip install psycopg2-binary
 

Комментарии:

1. в вопросе указана версия Python как 3.7.0 , поэтому принятый ответ должен работать с python3. Я не вижу в этом необходимости.

2. Если вы используете Mac, pip или python обратитесь к Python 2. Вы должны явно указать версию, т. Е. pip3 install ... Или python3 -m pip install ... . Я могу отредактировать, чтобы сделать этот ответ более понятным для других пользователей

3. @thenewjames, если вы НЕ используете virtualenv . В противном pip случае или python должен работать прямо, ссылаясь на python 3 .

Ответ №3:

Я предполагаю python , что указывает на python2 , но вы установили psycopg2 для python3 , так как вы используете pip3 . Установите его через pip install pyscopg2 psycopg2-binary то, на что должен указывать pip python2

Комментарии:

1. pip install pyscopg2 psycopg2-binary Collecting pyscopg2 Could not find a version that satisfies the requirement pyscopg2 (from versions: ) No matching distribution found for pyscopg2

2. Да, но я бегу alias python=python3 так, чтобы использовать python3

3. Да, конечно, так оно и есть.

4. Просто откройте приглашение с помощью python3 и попробуйте import psycopg2 там

5. which просто указывает на местоположение исполняемого файла pip и python , конечно, должен указывать на разные. Это еще один выстрел в темноте, но что, если вы попробуете python -m pip install psycopg2 ? А затем попробуйте выполнить import psycopg2 из того же интерпретатора.