python manage.py dbshell не находит psycopg2, хотя он установлен и находится в пути

Я хотел бы выдавать команды SQL через python manage.py dbshell, но получаю сообщение об ошибке «CommandError: у вас, похоже, не установлена ​​программа sqlite3 или она не находится на вашем пути». Из приглашения python я могу импортировать psycopg2 без каких-либо ошибок, и psycopg2, похоже, находится на моем пути к python.

Я пытаюсь использовать django, и мой settings.py указывает «ENGINE»: «django.db.backends.postgresql_psycopg2»

Любая помощь будет принята с благодарностью,

Спасибо, Джулиан


person Julian Jordan    schedule 25.09.2014    source источник


Ответы (3)


когда вы запускаете ./manage.py dbshell psql or sqlite3, эта команда предполагает, что программы находятся в вашем PATH. это просто вызывает имя программы.

sqlite3

из самого Python не содержит команды sqlite3. если вы хотите получить доступ из командной строки, вам необходимо установить библиотеку SQLite, которая включает утилиту simple command-line с именем sqlite3. но без установки библиотеки вы можете создать сервер базы данных, потому что он не требует запуска отдельного сервера и самого sqlite3 в виде текстового файла.

Если вы разрабатываете простой проект или что-то, что вы не планируете развертывать в производственной среде, используйте SQLite

в вашем случае сначала установите sqlite3, используя sudo apt-get install sqlite3 libsqlite3-dev для доступа к dbshell.

постгрес

сравните с sqlite3 этому postgres нужен пакет для инициализации. postgresql нужен пакет postgresql_psycopg2

person Raja Simon    schedule 25.09.2014
comment
Привет, postgres — это база данных, которую я в конечном итоге собираюсь использовать, поэтому я бы хотел придерживаться ее, а не sqlite3. Запуск psql отлично работает из любого каталога, поэтому я думаю, что он находится в моем PATH. Как я уже упоминал, я думаю, что psycopg2 также установлен нормально, так как я могу запустить import psycopg2 без ошибок из командной строки python. Запуск ./manage.py dbshell psql выдает список ошибок, кульминацией которого является: output = self.handle(*args, **options) TypeError: handle() takes exactly 1 argument (7 given) Спасибо за помощь. - person Julian Jordan; 26.09.2014
comment
@JulianJordan вы никогда не упоминали в своем вопросе, когда запуск dbshell psql дает ошибку` - person Raja Simon; 26.09.2014
comment
Привет. До вашего полезного ответа я не знал, что я могу указать psql в конце ./manage.py dbshell, чтобы это само по себе было полезно, так как до этого я получал ошибку, связанную с sqlite3 (предположительно вариант по умолчанию?) - person Julian Jordan; 26.09.2014
comment
О, .. так что теперь dbshell psql выдает эту ошибку output = self.handle(*args, **options) TypeError: handle() takes exactly 1 argument (7 given) я прав? - person Raja Simon; 26.09.2014
comment
Привет - указание имени моей базы данных после dbshell psql дает аналогичную ошибку: output = self.handle(*args, **options) TypeError: handle() takes exactly 1 argument (8 given) - person Julian Jordan; 26.09.2014
comment
@JulianJordan о . хорошо .. давайте вот так dbshell psql --database=default попробуйте сначала по умолчанию, если это не удается, попробуйте фактическое имя базы данных .. - person Raja Simon; 26.09.2014
comment
Извините, это тоже не работает. Моя главная цель на данный момент — пройти руководство по django, поэтому я сделал новую настройку, используя sqlite3, которая просто работает. В конечном итоге мне придется использовать postgres, но я думаю, что сейчас я буду использовать более простую настройку db. Спасибо за ваши предложения :о) - person Julian Jordan; 26.09.2014
comment
@JulianJordan, пожалуйста, прочитайте этот квест перед тем, как продолжить http://stackoverflow.com/questions/17776709/setting-up-postgresql-with-django-project,. - person Raja Simon; 26.09.2014

Вам нужно установить sqlite3, чтобы иметь возможность запускать dbshell

Установка программы sqlite должна решить проблему:

sudo apt-get install sqlite3
person geo_pythoncl    schedule 25.09.2014

Я думаю, что есть некоторая путаница в отношении того, что делает dbshell. Из документации:

Запускает клиент командной строки для механизма базы данных, указанного в настройках ENGINE, с параметрами подключения, указанными в настройках USER, PASSWORD и т. д.

  • Для PostgreSQL это запускает клиент командной строки psql.
  • Для MySQL это запускает клиент командной строки mysql.
  • Для SQLite это запускает клиент командной строки sqlite3.

Эта команда предполагает, что программы находятся в вашем PATH, поэтому простой вызов имени программы (psql, mysql, sqlite3) найдет программу в нужном месте. Нет возможности указать местоположение программы вручную.

Это не похоже на manage.py shell, dbshell просто запускает обычную оболочку для настроенной базы данных, за исключением того, что она регистрирует вас с учетными данными в settings.py.

Это означает, что если вы используете postgresql, у вас должна быть уже установлена ​​команда psql, чтобы dbshell работала. Эта команда не является частью Python, но поставляется с сервером postgresql.

По порядку - если у вас установлен только psycopg2, то команда dbshell работать не будет.

person Burhan Khalid    schedule 26.09.2014
comment
Привет. У меня установлена ​​команда psql, и при ее запуске появляется приглашение postgres: username=# - person Julian Jordan; 26.09.2014
comment
Пожалуйста, обновите вопрос с помощью файла settings.py. - person Burhan Khalid; 26.09.2014
comment
@BurhanKhalid Сам вопрос довольно неясен .. хотя теперь у нас есть TypeError - person Raja Simon; 26.09.2014
comment
Я скрыл имя пользователя/пароль в settings.py и разместил его здесь: dl.dropboxusercontent .com/u/23754608/settings.py (это слишком долго, чтобы публиковать здесь напрямую, есть ли лучший способ?) - person Julian Jordan; 26.09.2014