这应该是不言自明的。我能够通过对象关系方法(ORM)公开数据库,但不能通过声明性方法。我没有实例化这个类吗?这里少了哪一步?你知道吗
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Table, Column, Integer, String
engine = create_engine('my connection details', echo=False)
Session = sessionmaker(bind=engine)
session = Session()
Base = declarative_base()
my_table = Table('my_table',
Base.metadata,
autoload=True,
autoload_with=engine,
schema='my_schema')
class MyClass(Base):
__tablename__ = 'my_table'
int_col = Column(Integer, primary_key=True)
str_col = Column(String)
>>> for stuff in session.query(my_table).all():
... print stuff # Works perfectly
>>> for stuff in session.query(MyClass).all():
... print stuff # DatabaseError: table or view does not exist
试试这个:
声明性为每个映射器创建表,因此声明性中的“my\u table”是另一个表。 也可以使用数据库反射:
相关问题 更多 >
编程相关推荐