繁体   English   中英

在SQLAlchemy中获取表名

[英]Get table names in SQLAlchemy

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']为空?

我遇到了同样的问题,这就是我解决的方法。

from sqlalchemy.schema import MetaData
from sqlalchemy import create_engine

engine = create_engine(config.DATABASE_URL)
meta = MetaData()
meta.reflect(bind=engine)

meta.tables.keys()   <== this is what we were looking for

在SqlAlchemy 1.0中检查新的自动映射功能

根据文档中的示例,如果表名称为MONTGOMERY_EMPLOYEE ,则应该能够使用代码段创建一个类:

Base = automap_base()
Base.prepare(engine, reflect=True)

MontEmp = Base.classes.MONTGOMERY_EMPLOYEE

那么它应该是可以查询类MontEmp任何手动表达的SQLAlchemy类。

Base.metadata.tables['MONTGOMERY_EMPLOYEE'] 

为空,因为这是一个declarative_base ,并且数据库尚未反映出来。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM