2

我正在使用 DataGrip 或 SQLiteStudio(数据库管理器)在数据库中运行一系列查询,指导我找到所需的信息。查询运行良好,结果显示在 Dabase Manager 的控制台中。但是,我需要将出现在数据库管理器控制台中的结果导出到 CVS 文件中。

我见过每个人都直接在 shell 中工作,但我需要(我必须)使用数据库管理器来运行查询(到目前为止,我需要一步运行的查询大约 600 行)。

在 sqlite3 外壳中,我能够运行(并且可以工作)(.headers on)(.mode csv)(.output C:/filename.csv)(从“6000_1000_Results”中选择*;)(.output stdout)

但是,在 DB 管理器的 sql 编辑器中运行此代码根本不起作用。

--(.....)
--(around 600 lines before)
--(.....)
    "Material ID",
    "Material Name",
    SUM("Quantity of Material")  Quantity
FROM
     "6000_1000_Results_Temp"
GROUP BY
  "DataCenterID", "Material ID";

------------------------------------------------------------
--(HERE IS WHERE I NEED TO EXPORT THE RESULTS IN A CVS FILE)
------------------------------------------------------------
.headers on
.mode csv
.output C:/NextCloudLuis/TemproDB.git/csvtest.csv
select * from "6000_1000_Results";
.output stdout
.show

DROP TABLE IF EXISTS "6000_1000_Results_Temp";
DROP TABLE IF EXISTS "6000_1000_Results";

Datagrip 没有显示任何错误,它会在几秒钟内运行查询,但是任何地方都没有文件,SQLiteStudio 给出了语法错误。

4

1 回答 1

1

最后我在接下来的步骤中解决了这个问题:我使用库 sqlite3 在 python 上运行所有查询。然后所有查询的结果都保存在 pandas 数据框中。然后将 pandas 数据框导出到 cvs 和 xlxs 文件。

这是python代码:

import sqlite3
import queries

conn = sqlite3.connect("tempro.db")  #make the database connection to python
level4000 = queries.level4000to1000(conn) #I call the function in queries.py
level4000.to_csv('Level4000to1000.csv') #export result ro cvs
level4000.to_excel('Level4000to1000.xlsx') #export result ro xlsx
conn.close() 

这是我保存所有查询的python文件(queries.py)

import sqlite3
from sqlite3 import Error
import pandas as pd


def level4000to1000(conn):

    cur = conn.cursor()
    cur.executescript(
        """
            /* Here I put all the 600 lines of queries */
            DROP TABLE IF EXISTS "4000_1000_Results_Temp";
            DROP TABLE IF EXISTS "4000_1000_Results";

            /* Here more and more lines */
            --To keep the results from all queries
            CREATE TABLE "4000_1000_Results_Temp" (
                "DeviceID"      INTEGER,
                "Device Name"   TEXT,
                             SUM("Quantity of Material")  Quantity
            FROM
                 "4000_1000_Results_Temp"
            GROUP BY
              "DeviceID", "Material ID";
            """)

    df = pd.read_sql_query('''SELECT  * FROM "4000_1000_Results";''', conn)
    cur.executescript("""DROP TABLE IF EXISTS "4000_1000_Results_Temp";
                      DROP TABLE IF EXISTS "4000_1000_Results";""")
    return df #returns a dataframe with the info results from the queries

最后,似乎没有办法使用SQL编码将结果导出为文件格式为cvs。

于 2019-08-20T08:28:24.610 回答