我是SQLAlchemy的新手。我使用Metadata()创建了一个基本表并关闭了连接。现在,即使重新打开连接,我似乎也无法访问数据库。我似乎缺少一行代码,但无法弄清楚它是什么。
这是我尝试重新打开连接的方法:
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)
关于我需要做什么才能再次访问该表?
答案 0 :(得分:0)
找到了将来可能会问相同问题的其他人的缺失行!
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
一切正常!