【问题标题】:Return an iterator with python pyodbc使用 python pyodbc 返回一个迭代器
【发布时间】:2019-03-19 11:41:38
【问题描述】:

我正在尝试使用 python 编写 DataAccessLayer。 其中一个函数应该为一大组行返回一个迭代器(我不想全部获取并占用大量内存)。

迭代器将用于另一个使用我的 DAL 类检查每个用户的东西的类。

我知道我不应该返回游标本身,但是如何给其他类一个迭代器呢?

我的达尔:

import src.data_handler.data_handler_conf as conf
import time
import pyodbc


class DataHandler:

def __init__(self):
    # Get configuration
    self.db_url = conf.DB_URL
    self.db_name = conf.DB_NAME
    self.db_username = conf.DB_USERNMAE
    self.db_password = conf.DB_PASSWORD

    self.db_conn = None
    self.connect()

def connect(self):
    self.db_conn = pyodbc.connect("DRIVER={FreeTDS}"
                                  ";SERVER=" + self.db_url +
                                  ";DATABASE=" + self.db_name +
                                  ";UID=" + self.db_username +
                                  ";PWD=" + self.db_password)
    self.db_conn.setencoding(encoding='utf-8')

def check_users(self):
    cursor = self.db_conn.cursor()
    cursor.execute("select user_name, field1 from users")

    # What should i return?!
    return cursor

【问题讨论】:

    标签: python-3.x pyodbc


    【解决方案1】:

    我怀疑您应该能够使用生成器,如下所示:

    def get_results(cnxn):
        crsr = cnxn.cursor()
        crsr.execute("SELECT * FROM MillionRows")
        row = crsr.fetchone()
        while row:
            yield row
            row = crsr.fetchone()
    

    它将返回pyodbc Row objects的序列。

    【讨论】:

      猜你喜欢
      • 2010-09-23
      • 2018-02-05
      • 1970-01-01
      • 2015-08-15
      • 2018-06-15
      • 2020-07-20
      • 1970-01-01
      • 2021-02-17
      • 1970-01-01
      相关资源
      最近更新 更多