#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
так, чтобы использовать python33. Да, конечно, так оно и есть.
4. Просто откройте приглашение с помощью python3 и попробуйте
import psycopg2
там5.
which
просто указывает на местоположение исполняемого файлаpip
иpython
, конечно, должен указывать на разные. Это еще один выстрел в темноте, но что, если вы попробуетеpython -m pip install psycopg2
? А затем попробуйте выполнитьimport psycopg2
из того же интерпретатора.