首页 > 解决方案 > 为什么 sqlalchemy 声明性基础对象没有属性“查询”?

问题描述

我创建了声明性表。

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, String
from sqlalchemy.dialects.postgresql import UUID
import uuid

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True)
    name = Column(String)

我需要过滤数据。在 中Flask-SQLAlchemy,我愿意

name = 'foo'
User.query.filter_by(name=name).first()

但是,如果我SQLAlchemy不使用 Flask,则会收到错误消息:

类型对象“用户”没有属性“查询”

对我有用的唯一方法是通过session.

engine = create_engine('DATABASE_URL')
Session = sessionmaker(bind=engine)
session = Session()

name = 'foo'
user = session.query(User).filter_by(name=name).first()

session.close()

标签: pythonsqlsqlalchemy

解决方案


Model.query...惯用语不是 SQLAlchemy ORM 的默认部分;这是Flask-SQLAlchemy提供的自定义。它在基本 SQLAlchemy 中不可用,这就是您收到错误消息的原因。


推荐阅读