gpt4 book ai didi

python - SQLAlchemy - 尝试预先加载..属性错误

转载 作者:行者123 更新时间:2023-11-29 13:07:37 25 4
gpt4 key购买 nike

我使用 SQLAlchemy 访问一个 postgres 表。我希望查询具有预加载功能。

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:%s@%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' 对象没有属性 'mapper'

没有预先加载的人会正确返回记录。

我是 SQLAlchemy 的新手。我不确定是什么问题。有什么指点吗?

最佳答案

您只能预加载关系属性。不在 table 上。预加载意味着在获取特定对象的同时从其他表加载对象。为查询加载所有对象的方式只需添加 all()。

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

查询现在将是表中所有对象(行)的列表,len(query) 将为您提供计数。

关于python - SQLAlchemy - 尝试预先加载..属性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1279583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com