sqlalchemy查询忽略了一些行

时间:2016-01-20 07:14:39

标签: python sql sqlalchemy psycopg2

我有一个sqlalchemy查询基本上像这样

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (tableView == _tableview1)
        return [Data1 count];
    else if (tableView == _tableview2)
        return [Data2 count];
    else if (tableView == _tableview3)
        return [Data3 count];

    return 0;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *identify;

    if(tableView == _tableview1)
        identify = @"cell1";
    else if(tableView == _tableview2)
        identify = @"cell2";
    else if(tableView == _tableview3)
    identify = @"cell3";

    table1_TableViewCell *cell = (table1_TableViewCell*)[tableView dequeueReusableCellWithIdentifier:identify];

    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"table1_TableViewCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }

if (tableView == _tableview1)
{
    cell.textLabel.text = @"This is tableview-1";
}
else if (tableView == _tableview2)
{
    cell.textLabel.text = @"This is tableview-2";
}
else if (tableView == _tableview3)
{
    cell.textLabel.text = @"This is tableview-3";
}

return cell;

这应该打印这两行:

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

但它只打印其中一个。我可以按user1或user2过滤并单独获取每一行,但我无法获得这两行。我试图迭代所有行(650万)并处理每一行。但是像这样的时间戳类似的那些继续被跳过。

这是Message类:

             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

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:0)

我认为您需要添加对all()

的调用

http://docs.sqlalchemy.org/en/latest/orm/query.html

所有()

将此Query表示的结果作为列表返回。 这导致执行基础查询。