【问题标题】:How can i collect all the Data from a Database by using SqlQuery at once?如何一次使用 SqlQuery 从数据库中收集所有数据?
【发布时间】:2021-08-26 12:54:18
【问题描述】:

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

【问题讨论】:

    标签: python qtsql pyside6 pyqt6


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复@Mayank。我很确定这将适用于 MySql。但是由于我使用的是带有 QODBC 驱动程序的 MS Acces 数据库,所以我需要一些不同的语法。我已经在过滤数据库时遇到了这个问题。 see here
    【解决方案2】:

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

    • 我开始为文件命名并生成 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多