1

我想收集数据库中的所有条目并将它们写入 .csv 文件。

为此,我试图想出一个这样的while循环:


def create_csv():
     query = QSqlQuery(db=db)
     query.prepare("SELECT * FROM database_name")
     query.exec()
     rec = query.record()
            
     print(query.isSelect())
     nameCol = rec.indexOf("name")

          while query.next():
          print(query.value(nameCol)) 

这给了我预期的“名称”列中的所有条目。但是由于数据库有更多的列,我想知道是否有一种更简单的方法可以一次获取所有列(和标题)?

一下子会使 csv 的创建变得容易得多。

4

2 回答 2

0

您可以使用一个简单的 SQL 命令来执行此操作:

select * from passtable4 LOCAL INTO OUTFILE 'C:\test.csv' FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"' LINES TERMINATED BY '\r\n';

您可能会遇到此错误:

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

此处此处提供了解决方案

如果您的数据库具有不同类型的数据类型(如日期、BLOB 等),您可以在此处找到更全面的指南

于 2021-06-09T14:16:34.197 回答
0

花了一段时间,但我想我找到了对我有用的东西:

  • 我开始构建文件的名称并生成 2 个列表
  • 执行了给我表的所有值的查询
  • 开始了一个for循环来获取标题。
  • 开始了一个while循环,它为我生成了临时列表元素“行”
  • 将临时列表元素添加到值列表中,使其成为列表列表
  • 构建了一个 Pandas-dataframe 并根据需要使用了 to_csv。

我确信有“更聪明”或更快的方法来完成这项工作。但至少它对我有用。

 def create_csv(self):
    
    today = datetime.today()
    now = today.strftime("%y%m%d_%H%M_%S_")
    
    filename = f"{jetzt}COS.csv"
    
    

    Column_Header=[]
    Article_Value=[]
    
    query = QSqlQuery(db=db)
    query.prepare(r"SELECT * FROM database_name")
    query.exec()
    
    rec = query.record()
    
    for id in range(rec.count()):
        
        Column_Header.append(rec.fieldName(id))
        
    indexes = range(rec.count())
        
    while query.next():
        
        row = [query.value(index) for index in indexes]
        
        
        Article_Value.append(row)
        
    df = pd.DataFrame(Article_Value, columns=Column_Header, index=None) 

    print(df)
    
    df.to_csv(filename,sep=';',index=False)
于 2021-07-20T18:55:51.927 回答