如何一次使用 SqlQuery 从数据库中收集所有数据?

问题描述

我想收集数据库中的所有条目并将它们写入 .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 的创建变得容易得多。

解决方法

你可以用一个简单的 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

解决方案提供herehere

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

,

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

  • 我首先为文件构建名称并生成了 2 个列表
  • 执行查询,提供表的所有值
  • 开始一个 for 循环来获取标题。
  • 开始一个while循环,它为我生成临时列表元素“行”
  • 将临时列表元素添加到值列表中,使其成为列表列表
  • 构建了一个 Pandas 数据框并根据需要使用了 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)