2016-01-20 94 views
0

我有一個SQLAlchemy的查詢去基本上是這樣的SQLAlchemy的查詢忽略某些行

for row in session.query(Message).order_by(Message.ts): 
    print(row) 

這應該打印這兩個行:

   ts    | uts  | user | message 
----------------------------+------------+-------|--------------- 
2016-01-20 06:07:38.905547 | 1453270059 | user1 | REDACTED 
2016-01-20 06:07:39.029675 | 1453270059 | user2 | REDACTED_UNIQUE 

但它僅打印其中的一個。我可以通過user1或user2進行過濾並分別獲取每行,但無法獲取這兩行。我試圖遍歷所有行(650萬)並處理每一行。但類似這樣的時間戳的人會不斷跳過。

這裏是Message類:

class Message(Base): 
    __tablename__ = 'log' 
    __init__ = Base.__init__ 

    ts = Column(DateTime) 
    uts = Column(BigInteger, primary_key=True) 
    user = Column(String(24)) 
    message = Column(String(512)) 
+0

我認爲你應該使用消息定義/元數據來完成這個問題。謝謝。 –

+0

@J_Zar什麼樣的元數據?我可以給消息模式,如果這就是你的意思 –

+0

http://docs.sqlalchemy.org/en/latest/core/metadata.html ...這是你使用的映射,因爲我可以看到你的消息類查詢。 –

回答

0

我想通了,Message類是發生了什麼事。不知怎的,primary_key從ts移到了uts。 sqlalchemy並沒有扼殺我不正確的主鍵,而是假設uts列中沒有重複項(這是一個問題,因爲uts列不是唯一的)。將它移回到ts(這是一個獨特的列)解決了問題。 Message類應該是:

class Message(Base): 
    __tablename__ = 'log' 
    __init__ = Base.__init__ 

    ts = Column(DateTime, primary_key=True) 
    uts = Column(BigInteger) 
    user = Column(String(24)) 
    message = Column(String(512))