SQLAlchemy查询不会遍历查询的所有结果

时间:2019-02-12 08:10:26

标签: python sqlalchemy

我在使用SQLAlchemy时遇到一些奇怪的行为,没有遍历查询的所有结果。

例如,我有以下python代码:

index = [0,4,5,9,10,14]
for i, x in enumerate(index):
    index[i] -= i

print(index)


for i in index:
    del data[i]

其中Column是我以通常的SQLAlchemy方式定义和映射的类:

engine = create_engine(<connection string>)
Session = sessionmaker(bind=engine)
session = Session() 

columns = session.query(Column)

counter = 1
for c in columns
    print(counter)
    counter = counter + 1

print('count: ' + str(columns.count()))

从我的查询中,我期望返回7034行,这就是最终的打印语句打印出来的结果(for columns.count()),但是for循环最多只能打印到2951年。 / p>

如果我对for循环中的返回数据执行其他任何操作,则仅处理2951,而不是全部7034。

有人知道我为什么会遇到这种差异吗?我该如何遍历所有7034行,而不仅仅是2951年?

1 个答案:

答案 0 :(得分:2)

我已经弄清楚了为什么我没有得到我期望的结果(我做了一些愚蠢的事情)。

Column类映射到的表中的'column_name'字段不是唯一的,因此将其作为主键仅过滤出唯一的值-由于存在重复,因此返回的行少于我的预期。 / p>

我通过将“列”映射的定义更新为:

对其进行了修复。
from base import Base
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Boolean

class Column(Base):
    __tablename__ = 'COLUMNS'
    __table_args__ = {'schema' : 'INFORMATION_SCHEMA'}

    table_catalog = Column(String, primary_key=True)
    table_schema = Column(String, primary_key=True)
    table_name = Column(String, primary_key=True)
    column_name = Column(String, primary_key=True)
    data_type = Column(String)