ai_eee_sql_gen / db_logging.py
laudes's picture
Upload folder using huggingface_hub
909cddd verified
import os
import sqlite3
import csv
from dotenv import load_dotenv
# Load environment variables from .env file
load_dotenv()
# SQLite DB path from .env for saving results
db_path = os.getenv("db_path", "./query_logs.db")
# Function to initialize the SQLite database
def initialize_local_db():
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# Check if the reformulated_query column exists
cursor.execute("PRAGMA table_info(query_logs);")
columns = [column[1] for column in cursor.fetchall()]
# If the reformulated_query column doesn't exist, alter the table
if 'reformulated_query' not in columns:
print("Altering table to add reformulated_query column...")
cursor.execute('''
CREATE TABLE IF NOT EXISTS query_logs_new (
id INTEGER PRIMARY KEY AUTOINCREMENT,
natural_language_query TEXT,
reformulated_query TEXT,
generated_sql TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
''')
# Copy data from old table to new table
cursor.execute('''
INSERT INTO query_logs_new (id, natural_language_query, generated_sql, created_at)
SELECT id, natural_language_query, generated_sql, created_at FROM query_logs;
''')
# Drop the old table
cursor.execute("DROP TABLE query_logs;")
# Rename the new table
cursor.execute("ALTER TABLE query_logs_new RENAME TO query_logs;")
conn.commit()
cursor.close()
conn.close()
# Function to reset (drop all tables) and recreate the schema
def reset_sqlite_db():
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# Drop the query_logs table
cursor.execute("DROP TABLE IF EXISTS query_logs;")
print("Dropped query_logs table")
# Recreate the query_logs table
cursor.execute('''CREATE TABLE query_logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
natural_language_query TEXT,
reformulated_query TEXT,
generated_sql TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);''')
print("Recreated the query_logs table.")
conn.commit()
cursor.close()
conn.close()
# Function to save the natural language query, reformulated query, and generated SQL to the local SQLite DB
def save_query_to_local_db(nl_query, reformulated_query, sql_query):
try:
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
insert_query = '''
INSERT INTO query_logs (natural_language_query, reformulated_query, generated_sql)
VALUES (?, ?, ?);
'''
cursor.execute(insert_query, (nl_query, reformulated_query, sql_query))
conn.commit()
cursor.close()
conn.close()
except Exception as e:
print(f"Error saving query: {e}")
# Function to retrieve saved queries from the local SQLite DB with pagination and search
def get_saved_queries(page=1, per_page=10, search_term=None):
try:
offset = (page - 1) * per_page
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
query = "SELECT natural_language_query, reformulated_query, generated_sql, created_at FROM query_logs"
if search_term:
query += f" WHERE natural_language_query LIKE '%{search_term}%' OR generated_sql LIKE '%{search_term}%'"
query += f" ORDER BY created_at DESC LIMIT {per_page} OFFSET {offset};"
cursor.execute(query)
rows = cursor.fetchall()
cursor.close()
conn.close()
return rows
except Exception as e:
return str(e)
# Manually clear all data (for testing purposes)
def clear_data():
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
cursor.execute("DELETE FROM query_logs")
conn.commit()
cursor.close()
conn.close()
# Function to retrieve the last 50 saved queries from the local SQLite DB
def get_last_50_saved_queries():
try:
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
query = "SELECT natural_language_query, reformulated_query, generated_sql, created_at FROM query_logs ORDER BY created_at DESC LIMIT 50;"
cursor.execute(query)
rows = cursor.fetchall()
cursor.close()
conn.close()
return rows
except Exception as e:
return str(e)
# Function to export all saved queries to a CSV file
def export_saved_queries_to_csv(file_path="./saved_queries.csv"):
try:
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# Fetch all saved queries (remove LIMIT 50)
cursor.execute("SELECT natural_language_query, reformulated_query, generated_sql, created_at FROM query_logs ORDER BY created_at DESC;")
rows = cursor.fetchall()
# Write the results to a CSV file
with open(file_path, 'w', newline='') as csvfile:
csv_writer = csv.writer(csvfile)
csv_writer.writerow(['Natural Language Query', 'Reformulated Query', 'Generated SQL', 'Timestamp'])
csv_writer.writerows(rows)
cursor.close()
conn.close()
return file_path
except Exception as e:
return str(e)
# Uncomment the following line to reset the SQLite database when you run this script
# reset_sqlite_db()