#python #postgresql #sqlalchemy
Вопрос:
Я изо всех сил пытаюсь понять, почему мой запрос ниже возвращает следующую ошибку, когда я передаю его непосредственно из postgres, где он работает нормально. Я читал, как помещать имя таблицы в кавычки, но это не работает :/.
from sqlalchemy import create_engine
db_name = 'blahh'
db_user = 'blahhd'
db_pass = 'blhd'
db_host = 'localhost'
db_port = 5432
## Connect to to the database
db_string = 'postgres://{}:{}@{}:{}/{}'.format(db_user, db_pass, db_host, db_port, db_name)
db = create_engine(db_string)
connection = db.connect()
connection.execute('select cake.name, cake.industry, cake.created_at from cake limit 10;')
connection.close()
ошибка:
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedTable) relation "cake" does not exist
LINE 1: ... cake limi...
^
Комментарии:
1. Либо таблица не была создана, либо вы подключаетесь не к той базе данных, либо вы подключаетесь к пользователю, которому не разрешен доступ к таблице. Если вы запускаете новые экземпляры docker, вы уверены, что таблица будет создана и заполнена? Регистрируется ли процесс?
Ответ №1:
Как объясняется в документации SQLAlchemy, вы пропускаете объект подключения. create_engine
просто представляет ресурс подключения. Вам нужно подключиться к нему, а затем закрыть соединение. Возможно, вам также потребуется добавить метод .fetchall()
для фактического просмотра списка элементов из вашего подключения.
Если вы попробуете что-то подобное:
from sqlalchemy import create_engine
db_name = 'blahh'
db_user = 'blahhd'
db_pass = 'blhd'
db_host = 'localhost'
db_port = 5432
## Connect to to the database
db_string = 'postgres://{}:{}@{}:{}/{}'.format(db_user, db_pass, db_host, db_port, db_name)
db = create_engine(db_string)
connection = db.connect()
connection.execute('select cake.name, cake.industry, cake.created_at from cake limit 10;').fetchall()
connection.close()
Комментарии:
1. Я добавил то, что вы посоветовали, но все та же ошибка @Dharman