NameError при удалении таблицы в SQLAlchemy - PullRequest
0 голосов
/ 03 ноября 2019

A продолжение от Как удалить таблицу в SQLAlchemy?

Я хочу удалить таблицу User_test, но при этом я постоянно получаю NameError

Я определил таблицу с помощью класса Python User.
Хотя я забыл, как я определил его столбцы, поэтому я запускаю следующий User class и пропускаю определения столбцов

engine = create_engine('postgresql+psycopg2://user:password@localhost/test')
Base = declarative_base(engine)

class User(Base):
   __tablename__ = 'User_test'
   __table_args__ = {'autoload':True}

Но когда я пытаюсь удалить таблицу User_test (пытаясь выполнить любое изследующие команды):

Base.metadata.drop_all(bind=engine, tables=[User_test.__table__])
Base.metadata.drop_all(tables=User_test)
User_test.drop(engine)
User_test.__table__.drop(engine)
User_test.__table__.drop(self._engine)

Я получаю:

"Nameerror: name "User_test" is not defined"

Хотя, когда я запускаю print(engine.table_names()) в python, я вижу таблицу.
И при запуске print(Base.metadata.tables.keys())Я вижу включенную таблицу

Я также вижу эту таблицу при запросе базы данных через psql (т. Е. При запуске run \dt в psql)
Хотя, когда я пытаюсь запустить select для таблицы в psql, т.е. (Select * from User_test);

Я получаю:

"Could not find a relationship with name User_test"

Мои вопросы:

  • Почему я получаю NameError при попытке отбросить таблицу в python и какя могу это исправить?
  • Почему я не могу выполнить запрос Select для таблицы в psql, когда я ясно ее вижу?
  • Нужно ли мне определять класс User со всеми столбцамиимена, вот почему все это происходит?

Спасибо

...