Sling Academy
Home/Python/Python: Converting an SQLite database to CSV and vice versa

Python: Converting an SQLite database to CSV and vice versa

Last updated: February 12, 2024

Introduction

In this tutorial, we’ll explore how to efficiently convert an SQLite database to a CSV file and vice versa using Python. This process is essential if you’re looking to create backups, manipulate data in spreadsheet software, or transfer data between different systems. We will go through the concepts step by step, progressing from basic to more advanced techniques, including handling large datasets and applying data transformations during conversion.

Getting Started

Before we delve into the code, ensure you have Python and SQLite installed on your system. You’ll also need to install the sqlite3 module, which comes bundled with Python, and pandas, a powerful library for data analysis that we’ll use for handling CSV files. Install pandas using pip if you haven’t already:

pip install pandas

Converting SQLite to CSV

Let’s start with converting an SQLite database into a CSV file. This process involves selecting data from the database and writing it to a CSV.

Basic Conversion

import sqlite3
import pandas as pd

# Connect to your SQLite database
conn = sqlite3.connect('example.db')

cursor = conn.cursor()
# Execute a query to get the data
cursor.execute("SELECT * FROM your_table_name")

# Fetchall data
rows = cursor.fetchall()

# Convert to DataFrame
df = pd.DataFrame(rows, columns=[column[0] for column in cursor.description])

# Write dataframe to CSV
df.to_csv('output.csv', index=False)

This code snippet establishes a connection to the SQLite database, selects all data from a specified table, converts it to a pandas DataFrame, and then writes the DataFrame to a CSV file.

Handling Large Datasets

Dealing with large datasets might require chunking – processing and writing data in pieces to avoid memory issues:

chunk_size = 10000
for chunk in pd.read_sql_query('SELECT * FROM your_table_name', conn, chunksize=chunk_size):
    chunk.to_csv('output_large.csv', mode='a', index=False)

This approach uses read_sql_query method from pandas with a chunksize parameter to read and write in batches.

Converting CSV to SQLite

Converting a CSV file into an SQLite database involves reading the CSV file and inserting its contents into an SQLite database.

Basic Conversion

import sqlite3
import pandas as pd

df = pd.read_csv('input.csv')

conn = sqlite3.connect('new_example.db')

# Convert DataFrame to SQL
df.to_sql('new_table_name', conn, if_exists='replace', index=False)

This code reads a CSV file into a pandas DataFrame and then uses to_sql method to insert the DataFrame’s data into a new or existing SQLite table.

Applying Data Transformations

In some scenarios, you might want to apply transformations to your data before inserting it into the database:

df = pd.read_csv('input.csv')

# Example transformation: converting a column to lowercase
df['your_column'] = df['your_column'].str.lower()

# Continue with the conversion as shown above

This snippet demonstrates a simple transformation of converting column values to lowercase before the database insertion.

Advanced Techniques

For more complex scenarios, such as dealing with foreign keys or custom data types, you’ll need to handle the conversion manually by iterating over the DataFrame rows and constructing custom INSERT or UPDATE statements based on your needs.

Conclusion

Converting between SQLite databases and CSV files is a common task that can be efficiently accomplished using Python. The key is to utilize the capabilities of libraries like sqlite3 and pandas to manipulate your data. With the right approach, you can handle even large data sets with ease, applying necessary transformations before convertion.

Next Article: Python sqlite3: CRUD examples

Previous Article: Python: Converting an SQLite database to JSON and vice versa

Series: Data Persistence in Python – Tutorials & Examples

Python

You May Also Like

  • Introduction to yfinance: Fetching Historical Stock Data in Python
  • Monitoring Volatility and Daily Averages Using cryptocompare
  • Advanced DOM Interactions: XPath and CSS Selectors in Playwright (Python)
  • Automating Strategy Updates and Version Control in freqtrade
  • Setting Up a freqtrade Dashboard for Real-Time Monitoring
  • Deploying freqtrade on a Cloud Server or Docker Environment
  • Optimizing Strategy Parameters with freqtrade’s Hyperopt
  • Risk Management: Setting Stop Loss, Trailing Stops, and ROI in freqtrade
  • Integrating freqtrade with TA-Lib and pandas-ta Indicators
  • Handling Multiple Pairs and Portfolios with freqtrade
  • Using freqtrade’s Backtesting and Hyperopt Modules
  • Developing Custom Trading Strategies for freqtrade
  • Debugging Common freqtrade Errors: Exchange Connectivity and More
  • Configuring freqtrade Bot Settings and Strategy Parameters
  • Installing freqtrade for Automated Crypto Trading in Python
  • Scaling cryptofeed for High-Frequency Trading Environments
  • Building a Real-Time Market Dashboard Using cryptofeed in Python
  • Customizing cryptofeed Callbacks for Advanced Market Insights
  • Integrating cryptofeed into Automated Trading Bots