Python将元组转换为CSV字符串

d6kp6zgx  于 2023-01-10  发布在  Python
关注(0)|答案(2)|浏览(148)

我正在尝试实现一个REST API,以CSV格式从SQL数据库返回记录。我想使用import csv来进行转换,我想使用一个生成器,以便我可以流结果。
这就是我所尝试的。

def get_data(query) -> Generator[str, None, None]:
    with pyodbc.connect(connStr) as conn:
        with conn.cursor() as cursor:
            cursor.execute(query)
            while 1:
                row = cursor.fetchone()
                if not row: break
                data = io.StringIO()
                csv.writer(data).writerow(row)
                yield data.getvalue()

这个方法很有效,但是我不喜欢。它看起来太冗长了,而且它创建了这么多临时的StringIO和writer对象!!请告诉我一个更好的方法。

lhcgjxsq

lhcgjxsq1#

我想我可以使用seek重用StringIO ...

def get_data(query) -> Generator[str, None, None]:
    data = io.StringIO()
    writer = csv.writer(data)
    with pyodbc.connect(connStr) as conn:
        with conn.cursor() as cursor:
            cursor.execute(query)
            while 1:
                row = cursor.fetchone()
                if not row: break
                data.seek(0)
                writer.writerow(row)
                yield data.getvalue()
n9vozmp4

n9vozmp42#

如果目标只是返回/产生 csv 格式的 resultset 记录值(以元组形式收集),则不需要使用io.StringIO()csv.writer

def get_data(query) -> Generator[str, None, None]:
    with pyodbc.connect(connStr) as conn:
        with conn.cursor() as cursor:
            cursor.execute(query)
            while True:
                row = cursor.fetchone()
                if not row: break
                yield ', '.join(map(str, (row)))

相关问题