Python 将数据帧导出到CSV

Python 将数据帧导出到CSV,python,pandas,csv,Python,Pandas,Csv,我正在将一个SQL表加载到一个数据帧中,然后将其直接推送到CSV中。问题在于出口。我要求: value|value|value 我得到: "(value|value|value)" 我该如何摆脱这种局面 这是我的密码: for row in self.roster.itertuples(): SQL = self.GenerateSQL(row) self.filename = '{}_{}.csv'.format(row.tablename, now.strftime("%

我正在将一个SQL表加载到一个数据帧中,然后将其直接推送到CSV中。问题在于出口。我要求:

value|value|value
我得到:

"(value|value|value)"
我该如何摆脱这种局面

这是我的密码:

for row in self.roster.itertuples():
    SQL = self.GenerateSQL(row)
    self.filename = '{}_{}.csv'.format(row.tablename, now.strftime("%Y-%m-%d"))
    # Open the file
    f = open(os.path.join(self.path, self.filename), 'w')
    # Create a connection and get a cursor
    cursor = self.conn.cursor()
    # Execute the query
    cursor.execute(SQL)
    # Get data in batches
    rowcount = 0
    while True:
        # Read the data
        df = pd.DataFrame(cursor.fetchmany(1000))
        # We are done if there are no data
        if len(df) == 0:
            break
        # Let's write to the file
        else:
            rowcount += len(df.index)
            print('Number of rows exported: {}'.format(str(rowcount)))
            df.to_csv(f, header=False, sep='|', index=False)

    # Clean up
    f.close()
    cursor.close()
感谢你的洞察力

更新1 这是df在1000个记录周期内的输出

[1000 rows x 1 columns]
Number of rows exported: 10000
                                                     0
0    [11054, Smart Session (30 Minute) , smartsessi...
1    [11055, Best Practices, bestpractices, 2018-06...
2    [11056, Smart Session (30 Minute) , smartsessi...
3    [11057, Best Practices, bestpractices, 2018-06...
两项记录:

                                                   0
0  [1, Offrs.com Live Training, livetraining, 201...
1  [2, Offrs.com Live Training, livetraining, 201...
如果您可以使用sqlalchemy包,那么就可以利用pd.read_sql函数来处理查询数据库和检索数据

import pandas as pd
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)

from sqlalchemy import create_engine
engine = create_engine('postgresql://postgres@localhost:5432/sample')

df = pd.read_sql_query('select * from climate limit 3',con=engine)
df.to_csv('out.csv', header=False, sep='|', index=False)
或者,您仍然可以使用光标。但是,在构建数据帧之前,需要将获取的行拆分为各个部分。目前,包含多个数据库表列的整行被放在一个dataframe行中。

如果您可以使用sqlalchemy软件包,则可以利用pd.read\u sql函数来处理查询数据库和检索数据

import pandas as pd
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)

from sqlalchemy import create_engine
engine = create_engine('postgresql://postgres@localhost:5432/sample')

df = pd.read_sql_query('select * from climate limit 3',con=engine)
df.to_csv('out.csv', header=False, sep='|', index=False)

或者,您仍然可以使用光标。但是,在构建数据帧之前,需要将获取的行拆分为各个部分。目前,包含多个数据库表列的整行被放在一个dataframe行中。

请检查df变量并查看列是什么?也许这是一个元组,您必须先解包,然后才能构建数据帧?我无法查看cursor.fetchmany1000返回的内容。我通常避免使用游标,只使用一个简单的SQL查询pd.read_SQL_query'select*from climate',con=engine,engine来自sqlalchemy.create_engine,它支持大多数DBMS服务器。如果您想发布完整的代码片段,请告诉我。我使用fetchmany1000的原因之一是为了确保服务器上的内存不会过载。我也愿意接受这方面的建议。您可以在SQL查询中使用limit或top关键字,这取决于您使用的数据库管理系统,以限制希望返回的行数,不用担心。我不打算只提取1000条记录。我的目的是把所有的记录分块拉出来。非常感谢。你能检查一下df变量,看看列是什么吗?也许这是一个元组,您必须先解包,然后才能构建数据帧?我无法查看cursor.fetchmany1000返回的内容。我通常避免使用游标,只使用一个简单的SQL查询pd.read_SQL_query'select*from climate',con=engine,engine来自sqlalchemy.create_engine,它支持大多数DBMS服务器。如果您想发布完整的代码片段,请告诉我。我使用fetchmany1000的原因之一是为了确保服务器上的内存不会过载。我也愿意接受这方面的建议。您可以在SQL查询中使用limit或top关键字,这取决于您使用的数据库管理系统,以限制希望返回的行数,不用担心。我不打算只提取1000条记录。我的目的是把所有的记录分块拉出来。非常感谢。我有点困惑。我不是要1000张唱片。我想要所有的记录,但要对输出进行分页,这样我就不会使服务器过载。你的DBMS是什么?如果是PostgreSQL,则在构造引擎时可以使用{'stream_results':True},然后使用带有chunksize参数集sql server 2012的read_sql_查询。这就是我的系统,对。然后,在完成df=pd.DataFramecursor.fetchmany1000之后,让我们检查df变量。请使用两行的示例内容更新问题正文。也许您的列只是堆叠到单个df列中的一个元组中。示例已经被推到问题区域。期待你的洞察力。我有点困惑。我不是要1000张唱片。我想要所有的记录,但要对输出进行分页,这样我就不会使服务器过载。你的DBMS是什么?如果是PostgreSQL,则在构造引擎时可以使用{'stream_results':True},然后使用带有chunksize参数集sql server 2012的read_sql_查询。这就是我的系统,对。然后,在完成df=pd.DataFramecursor.fetchmany1000之后,让我们检查df变量。请使用两行的示例内容更新问题正文。也许您的列只是堆叠到单个df列中的一个元组中。示例已经被推到问题区域。期待您的见解。