2
我下面的SQLAlchemy的教程http://docs.sqlalchemy.org/en/rel_0_9/orm/tutorial.htmlSQLAlchemy的from_statement()找不到列
儘管如此,而不是使用SQLite的後端,我使用MySQL。問題是,當我嘗試執行字面MySQL的語句來選擇從用戶表中的列,如
SELECT name from users;
會而做
SELECT * FROM users
失敗,
NoSuchColumnError: "Could not locate column in row for column 'users.id'"
將工作得很好。 我錯過了什麼嗎?
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 = sessionmaker(bind=engine)
session = Session()
,我試圖做
session.query(Users).from_statement('SELECT name from users')
順便說一句,這句話在MySQL客戶端上運行時工作正常。 我錯過了什麼,或者它是一個錯誤?
作爲一個額外的細節,「SELECT id FROM users」不會失敗,但它不會返回預期的(id列表),但是所有的列,只要它做了「SELECT * FROM用戶「 – fenomenoxp
絕對不是一個錯誤。當你查詢一個對象時(就像你在'query(User)'中做的那樣),ORM必須有一個primary_key列來標識對象。這就是爲什麼它需要一個「id」列。當你僅選擇'id'列時,它仍然會返回'User'的實例,並且一旦你訪問了它的其他屬性,它就會發出另一個SQL語句來加載每個用戶的其他列。 – van