Sqlalchemy from_statement() 找不到列

7 投票
1 回答
10056 浏览
提问于 2025-04-18 04:36

我正在按照这个SQLAlchemy的教程来学习。

不过,我不是用SQLite,而是用MySQL。问题是,当我尝试执行一个直接的MySQL语句来从用户表中选择一个列时,比如说

SELECT name from users;

这个操作会失败,错误信息是

NoSuchColumnError: "Could not locate column in row for column 'users.id'"

而如果我用

SELECT * FROM users

这个方法就能正常工作。

我是不是漏掉了什么?

Users类是这样定义的:

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String(50))
    fullname = Column(String(50))
    password = Column(String(50))
    def __repr__(self):
        return "<User(name='%s', fullname='%s', password='%s')>" % (self.name, self.fullname, self.password)

会话(session)是这样定义的:

Session = sessionmaker(bind=engine)
session = Session()

我想要执行的是

session.query(Users).from_statement('SELECT name from users')

顺便说一下,这个语句在MySQL客户端上运行得很好。

我是不是漏掉了什么,还是说这是个bug?

1 个回答

14

我自己回答一下,以防有人遇到同样的问题。这里的语法

session.query(Users).from_statement('SELECT name from users')

是错的。应该是

session.query('name').from_statement('SELECT name from users')

列的列表应该放在query()这个函数的调用里面。

撰写回答