2009-08-14 55 views
1

我使用SQLAlchemy訪問postgres表。我想要查詢具有預先加載。SQLAlchemy - 試着渴望加載..屬性錯誤

from sqlalchemy.orm import sessionmaker, scoped_session, eagerload 
from settings import DATABASE_USER, DATABASE_PASSWORD, DATABASE_HOST, DATABASE_PORT, DATABASE_NAME 
from sqlalchemy import create_engine 
from sqlalchemy import Table, Column, Integer, String, Boolean, MetaData, ForeignKey 
from sqlalchemy.orm import mapper 
from sqlalchemy.ext.declarative import declarative_base 

def create_session(): 
    engine = create_engine('postgres://%s:%[email protected]%s:%s/%s' % (DATABASE_USER, DATABASE_PASSWORD, DATABASE_HOST, DATABASE_PORT, DATABASE_NAME), echo=True) 
    Session = scoped_session(sessionmaker(bind=engine)) 
    return Session() 

Base = declarative_base() 
class Zipcode(Base): 
    __tablename__ = 'zipcode' 
    zipcode = Column(String(6), primary_key = True, nullable=False) 
    city = Column(String(30), nullable=False) 
    state = Column(String(30), nullable=False) 

session = create_session() 
query = session.query(Zipcode).options(eagerload('zipcode')).filter(Zipcode.state.in_(['NH', 'ME'])) 
#query = session.query(Zipcode.zipcode).filter(Zipcode.state.in_(['NH', 'ME'])) 
print query.count() 

這種失敗 AttributeError的: 'COLUMNPROPERTY' 對象有沒有屬性 '映射'

一個沒有正確eagerloading返回記錄。

我是SQLAlchemy的新手。我不確定問題是什麼。任何指針?

+0

您是否有此初學者代碼的鏈接可能描述此代碼的工作原理? – sAguinaga 2017-06-15 10:27:46

回答

2

您只能急切地加載關係屬性。不在桌子上。急切加載意味着在獲取特定對象的同時從其他表中加載對象。加載查詢的所有對象的方式將簡單地添加all()。

query = session.query(Zipcode).options(eagerload('zipcode')).filter(Zipcode.state.in_(['NH', 'ME'])).all() 

該查詢現在將是表中所有對象(行)的列表,並且len(query)將爲您提供計數。

+0

是的..謝謝我混在一起.. – Ramya 2009-08-14 21:40:13