为什么 sqlalchemy 声明性基础对象没有属性“query”?

Mik*_*ike 7 python sql 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)
Run Code Online (Sandbox Code Playgroud)

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

name = 'foo'
User.query.filter_by(name=name).first()
Run Code Online (Sandbox Code Playgroud)

但如果我在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()
Run Code Online (Sandbox Code Playgroud)

sna*_*erb 9

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