代码之家  ›  专栏  ›  技术社区  ›  t_warsop

不从SQLChemy查询中迭代所有结果

  •  0
  • t_warsop  · 技术社区  · 7 年前

    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()))
    

    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)
    

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

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   t_warsop    7 年前

    column类映射到ins的表中的“column_name”字段并不唯一,因此选择它作为主键只过滤出唯一的值-这是因为有重复的结果导致返回的行比我预期的要少。

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

    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)