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

How can i collect all the Data from a Database by using SqlQuery at once?

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

为此,我试图想出一个 while-loop 这样的:


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)) 

这按预期提供了“名称”列中的所有条目。 但是由于数据库有更多的列, 我想知道是否有更简单的方法来一次获取所有列(和 headers)?

一次完成将使 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

提供了解决方案 and

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

花了一段时间,但我想我找到了适合我的东西:

  • 我开始为文件创建名称并生成了 2 个列表
  • 执行的查询为我提供了 table
  • 的所有值
  • 开始 for-loop 以获得 Headers。
  • 启动了一个 while 循环,为我生成临时 list-element“行”
  • 将临时 list-elemt 添加到 Value-List,使其成为列表的列表
  • 构建了一个 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)