from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String
from sqlalchemy.orm import sessionmaker
engine = create_engine('mysql://we0:go@wecom/javadb', convert_unicode=True, echo=False)
try:
engine.execute("use javadb")
engine.connect()
print 'connected'
except:
print 'error'
Base = declarative_base()
Session = sessionmaker(bind=engine)
session = Session()
print engine.table_names()
print Base.metadata.tables
#print Base.metadata.reflect(engine)
class MontEmp(Base):
__table__ = Base.metadata.tables['MONTGOMERY_EMPLOYEE']
for item in session.query(MontEmp.id):
print item
我试图从现有数据库中获取表名称并对其进行查询,但是当我尝试通过-Base.metadata.tables ['MONTGOMERY_EMPLOYEE']访问该表时出现错误,我得到了一个关键错误。
当我打印Base.metadata.tables时,它为空,但是当我打印engine.table_names()时,它列出了所有表。
问题:-
为什么Base.metadata.tables ['MONTGOMERY_EMPLOYEE']为空?
根据文档中的示例,如果表名称为MONTGOMERY_EMPLOYEE
,则应该能够使用代码段创建一个类:
Base = automap_base()
Base.prepare(engine, reflect=True)
MontEmp = Base.classes.MONTGOMERY_EMPLOYEE
然后应该可以将该类MontEmp
作为任何手动表达的SqlAlchemy类进行查询。
Base.metadata.tables['MONTGOMERY_EMPLOYEE']
为空,因为这是一个declarative_base
并且数据库尚未反映出来。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句