SQLite: How do I save the result of a query as a CSV file?

后端 未结 6 2020

I\'m new to SQLite. Is there a way I can export the results of a query into a CSV file?

相关标签:
6条回答
  • 2020-11-28 01:19

    Good answers from gdw2 and d5e5. To make it a little simpler here are the recommendations pulled together in a single series of commands:

    sqlite> .mode csv
    sqlite> .output test.csv
    sqlite> select * from tbl1;
    sqlite> .output stdout
    
    0 讨论(0)
  • 2020-11-28 01:27

    All the existing answers only work from the sqlite command line, which isn't ideal if you'd like to build a reusable script. Python makes it easy to build a script that can be executed programatically.

    import pandas as pd
    import sqlite3
    
    conn = sqlite3.connect('your_cool_database.sqlite')
    
    df = pd.read_sql('SELECT * from orders', conn)
    df.to_csv('orders.csv', index = False)
    

    You can customize the query to only export part of the sqlite table to the CSV file.

    You can also run a single command to export all sqlite tables to CSV files:

    for table in c.execute("SELECT name FROM sqlite_master WHERE type='table';").fetchall():
        t = table[0]
        df = pd.read_sql('SELECT * from ' + t, conn)
        df.to_csv(t + '_one_command.csv', index = False)
    

    See here for more info.

    0 讨论(0)
  • 2020-11-28 01:28

    To include column names to your csv file you can do the following:

    sqlite> .headers on
    sqlite> .mode csv
    sqlite> .output test.csv
    sqlite> select * from tbl1;
    sqlite> .output stdout
    

    To verify the changes that you have made you can run this command:

    sqlite> .show
    

    Output:

    echo: off   
    explain: off   
    headers: on   
    mode: csv   
    nullvalue: ""  
    output: stdout  
    separator: "|"   
    stats: off   
    width: 22 18 
    
    0 讨论(0)
  • 2020-11-28 01:35

    In addition to the above answers you can also use .once in a similar way to .output. This outputs only the next query to the specified file, so that you don't have to follow with .output stdout.

    So in the above example

    .mode csv
    .headers on
    .once test.csv
    select * from tbl1;
    
    0 讨论(0)
  • 2020-11-28 01:35

    Alternatively you can do it in one line (tested in win10)

    sqlite3 -help
    sqlite3 -header -csv db.sqlite 'select * from tbl1;' > test.csv
    

    Bonus: Using powershell with cmdlet and pipe (|).

    get-content query.sql | sqlite3 -header -csv db.sqlite > test.csv
    

    where query.sql is a file containing your SQL query

    0 讨论(0)
  • 2020-11-28 01:39

    From here and d5e5's comment:

    You'll have to switch the output to csv-mode and switch to file output.

    sqlite> .mode csv
    sqlite> .output test.csv
    sqlite> select * from tbl1;
    sqlite> .output stdout
    
    0 讨论(0)
提交回复
热议问题