2
即使結果相同,由同一個選擇不同查詢返回但創建方式不同的鍵控元組對象完全不同。Sqlalchemy鍵控元組錯誤與選擇不同
下面是一個例子證明在這種錯誤:
import sqlalchemy as sa
from sqlalchemy.orm import (sessionmaker, scoped_session,)
from sqlalchemy.ext.declarative import (declarative_base,)
Base = declarative_base()
db_uri = 'sqlite:///test.db'
engine = sa.create_engine(db_uri, echo=True)
class Test(Base):
__tablename__ = 'test'
id = sa.Column(sa.Integer, primary_key=True)
field2 = sa.Column(sa.Integer)
Base.metadata.create_all(bind=engine)
def main():
Session = scoped_session(sessionmaker(bind=engine))
session = Session()
session.add_all([Test(field2=i) for i in xrange(10)])
session.add_all([Test(field2=i) for i in xrange(10)])
session.commit()
q1 = session.query(Test.field2).distinct().all()
q2 = session.query(sa.distinct(Test.field2)).all()
# print the results
print 'Q1 results :' , ' -- ', [i for i in q1]
print 'Q2 results :' , ' -- ', [i for i in q2]
# print the keyed tuple dictionary
print 'Q1 as_dict :', [i._asdict() for i in q1]
print 'Q2 as_dict :', [i._asdict() for i in q2]
這些2個查詢作爲由所述第一對打印所示
然而返回完全相同的結果,該obj._as_dict()值是不同的;爲第一個查詢填充,第二個爲空。
這是正常的嗎?我錯過了什麼?
問候,