【发布时间】:2019-02-12 17:13:11
【问题描述】:
我遇到了一些奇怪的行为,因为 SQLAlchemy 没有遍历查询的所有结果。
例如,我有以下python代码:
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()))
其中 Column 是我以通常的 SQLAlchemy 方式定义和映射的类:
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)
table_schema = Column(String)
table_name = Column(String)
column_name = Column(String, primary_key=True)
data_type = Column(String)
根据我的查询,我期望返回 7034 行,这就是最终打印语句打印出来的内容(for columns.count()),但 for 循环最多只能打印 2951 个计数器。
如果我在 for 循环中对返回的数据执行任何其他操作,则只会处理 2951,而不是所有 7034。
有谁知道我为什么会遇到这种差异,以及如何迭代所有 7034 行,而不仅仅是 2951?
【问题讨论】:
-
@AokiAhishatsu 我有,我可以访问查询返回的数据而不会出错,只是 for 循环不会遍历所有数据
-
你能用 SQL 写你的查询吗?
-
@AokiAhishatsu 是的,查询实际上是“从表中选择 *”
-
@AokiAhishatsu 刚试过,结果一样
-
@AokiAhishatsu print(len(columns)) 无效,它给出错误:'Query' 类型的对象没有 len()
标签: python sqlalchemy