SQLAlchemy - невозможно редактировать таблицу после однократного закрытия соединения - PullRequest
0 голосов
/ 06 сентября 2018

Я новичок в SQLAlchemy. Я создал базовую таблицу с помощью метаданных () и закрыл соединение. Теперь я не могу получить доступ к базе данных, даже когда я снова открываю соединение. Кажется, мне не хватает строки кода, но я не могу понять, что это такое.

Вот как я пытаюсь снова открыть соединение:

engine = create_engine('sqlite:///C:\\Users\\..\\Documents\\Untitled Folder\\Database.db', echo= False) 
metadata = MetaData()
conn = engine.connect()
trans = conn.begin()
trans

Однако каждый раз, когда я пытаюсь выбрать или сделать что-то с моей таблицей, содержащейся в базе данных, я получаю следующую ошибку:

>>>ins = tabledata.insert().values(fullname= 'Hello', year='2018')

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-3-a148c71d348c> in <module>()
----> 1 ins = tabledata.insert().values(fullname= 'Hello', year='2018')

NameError: name 'tabledata' is not defined

Я знаю, что таблица существует и не была удалена, поскольку у меня есть браузер, который позволяет мне просматривать базу данных, и она все еще там.

Для справки, вот как я создал свою таблицу в базе данных: Все работало нормально, пока я не закрыл соединение и не попытался его перезапустить.

metadata = MetaData()

tabledata = Table('tabledata', metadata,
    Column('id', Integer, primary_key= True ),
    Column('fullname', String),
    Column('year', String),)

metadata.create_all(engine)

Есть идеи, что мне нужно сделать, чтобы снова получить доступ к Таблице?

1 Ответ

0 голосов
/ 07 сентября 2018

Найдена пропущенная строка для всех, кто может задать этот же вопрос в будущем!

tabledata = Table('tabledata', metadata, autoload=True, autoload_with=engine)

Таким образом, полный способ перезагрузить таблицу:

engine = create_engine('sqlite:///C:\\Users\\..\\Documents\\UntitledFolder\\Database.db', echo= False) 
metadata = MetaData()
tabledata = Table('tabledata', metadata, autoload=True, autoload_with=engine)
conn = engine.connect()
conn

И все это работает!

...