我在使用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年?
答案 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)