Files
ai6-m3/jokes_bot/v4.0/populate_db.py
2026-02-06 10:12:24 +03:00

113 lines
4.2 KiB
Python
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
Script to populate the jokes database with sample data.
"""
import sqlite3
import os
def populate_database():
# Connect to the database
db_path = 'jokes.db'
if not os.path.exists(db_path):
print(f"❌ Database {db_path} does not exist!")
print("Please run database.py first to create the database.")
return False
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# Check if jokes table is empty before adding data
try:
cursor.execute('SELECT COUNT(*) FROM jokes')
count = cursor.fetchone()[0]
except sqlite3.OperationalError:
print("❌ The jokes table does not exist. Please run database.py first.")
conn.close()
return False
if count > 0:
overwrite = input(f"⚠️ Database already contains {count} jokes. Overwrite? (y/N): ")
if overwrite.lower() != 'y':
print("❌ Operation cancelled.")
conn.close()
return False
# Clear existing data first
# Only try to delete from user_sentiments if the table exists
try:
cursor.execute('DELETE FROM user_sentiments')
except sqlite3.OperationalError:
# user_sentiments table doesn't exist, which is OK
print(" user_sentiments table does not exist yet.")
pass
cursor.execute('DELETE FROM jokes')
# Use the clean SQL file without SELECT statements
sql_file = 'clean_sample_data.sql'
if not os.path.exists(sql_file):
print(f"❌ SQL file {sql_file} does not exist!")
return False
try:
# Execute the clean SQL file directly
with open(sql_file, 'r', encoding='utf-8') as f:
sql_commands = f.read()
cursor.executescript(sql_commands)
conn.commit()
print(f"✅ Successfully populated the jokes table with sample jokes!")
# Count the total number of jokes
cursor.execute('SELECT COUNT(*) FROM jokes')
count = cursor.fetchone()[0]
print(f"📊 Total jokes in database: {count}")
# Add some sample user sentiments for the first few jokes
print("🎯 Adding sample user sentiments...")
jokes_with_sentiment = [(1, 'up'), (1, 'up'), (1, 'neutral'),
(2, 'down'), (2, 'up'),
(3, 'up'), (3, 'up'), (3, 'up')]
for joke_id, sentiment in jokes_with_sentiment:
try:
cursor.execute('''
INSERT INTO user_sentiments (joke_id, user_sentiment)
VALUES (?, ?)
''', (joke_id, sentiment))
except sqlite3.OperationalError:
# If user_sentiments table doesn't exist, skip adding sentiments
print(" Skipping user sentiments as the table doesn't exist yet.")
break
conn.commit()
print(f"✅ Added sample user sentiments for {len(jokes_with_sentiment)} joke entries")
# Show user sentiment distribution if the table exists
try:
cursor.execute('SELECT user_sentiment, COUNT(*) FROM user_sentiments GROUP BY user_sentiment')
user_distribution = cursor.fetchall()
if user_distribution:
print(f'\n👥 User Sentiment distribution:')
for sentiment, cnt in user_distribution:
emoji = {'up': '👍', 'down': '👎', 'neutral': '😐'}[sentiment]
print(f' {emoji} {sentiment.capitalize()}: {cnt} ratings')
except sqlite3.OperationalError:
print("\n User sentiment table not available yet.")
conn.close()
return True
except Exception as e:
print(f"❌ Error executing SQL commands: {e}")
conn.rollback()
conn.close()
return False
if __name__ == '__main__':
print("🔄 Populating jokes database with sample data...")
success = populate_database()
if success:
print("\n🎉 Database successfully populated! You can now run jokes.py to enjoy the jokes.")
else:
print("\n💥 Failed to populate the database.")