Initial commit: Kivy database interface application with search, add/update, delete functionality and Windows build support

This commit is contained in:
ske087
2025-10-20 13:21:29 +03:00
commit 8ae60a77e4
17 changed files with 11624 additions and 0 deletions

138
import_csv.py Executable file
View File

@@ -0,0 +1,138 @@
#!/usr/bin/env python3
"""
CSV Import Script for MariaDB Database
This script imports data from sept.csv into the offsystemsCounting table
"""
import csv
from database_manager import DatabaseManager
def import_csv_data(csv_file_path):
"""Import data from CSV file into the database."""
print("CSV Import Script for MariaDB Database")
print("=" * 40)
# Initialize database connection
db = DatabaseManager()
# Check if we can connect
conn = db.get_connection()
if not conn or not conn.is_connected():
print("❌ Cannot connect to MariaDB database.")
print("Please make sure:")
print("1. MariaDB server is running")
print("2. Database 'cantare_injectie' exists")
print("3. User 'omron' has proper permissions")
return False
print("✅ Successfully connected to MariaDB database")
# Read and import CSV data
try:
with open(csv_file_path, 'r', newline='', encoding='utf-8') as csvfile:
reader = csv.DictReader(csvfile)
# Check if the required columns exist
if 'id' not in reader.fieldnames or 'mass' not in reader.fieldnames:
print("❌ CSV file must contain 'id' and 'mass' columns")
return False
print(f"📁 Reading data from: {csv_file_path}")
print(f"📋 Columns found: {reader.fieldnames}")
# Import data
imported_count = 0
updated_count = 0
error_count = 0
for row_num, row in enumerate(reader, start=2): # Start at 2 because line 1 is header
try:
record_id = row['id'].strip()
mass_str = row['mass'].strip()
# Validate data
if not record_id:
print(f"⚠️ Row {row_num}: Empty ID, skipping")
error_count += 1
continue
if len(record_id) > 20:
print(f"⚠️ Row {row_num}: ID '{record_id}' too long (max 20 chars), skipping")
error_count += 1
continue
try:
mass = float(mass_str)
except ValueError:
print(f"⚠️ Row {row_num}: Invalid mass value '{mass_str}', skipping")
error_count += 1
continue
# Check if record exists
existing = db.search_by_id(record_id)
# Add or update record
success = db.add_or_update_record(record_id, mass)
if success:
if existing:
updated_count += 1
if updated_count <= 5: # Show first 5 updates
print(f"🔄 Updated: {record_id} = {mass}")
else:
imported_count += 1
if imported_count <= 5: # Show first 5 imports
print(f" Added: {record_id} = {mass}")
else:
error_count += 1
print(f"❌ Failed to import row {row_num}: {record_id}")
# Progress indicator
if (imported_count + updated_count + error_count) % 100 == 0:
print(f"📊 Progress: {imported_count + updated_count + error_count} records processed...")
except Exception as e:
error_count += 1
print(f"❌ Error processing row {row_num}: {e}")
# Final summary
print("\n" + "=" * 40)
print("📊 IMPORT SUMMARY")
print("=" * 40)
print(f"✅ New records added: {imported_count}")
print(f"🔄 Records updated: {updated_count}")
print(f"❌ Errors: {error_count}")
print(f"📈 Total processed: {imported_count + updated_count + error_count}")
# Verify final count in database
total_records = db.get_record_count()
print(f"📋 Total records in database: {total_records}")
if imported_count > 0 or updated_count > 0:
print("\n✅ CSV import completed successfully!")
return True
else:
print("\n⚠️ No records were imported.")
return False
except FileNotFoundError:
print(f"❌ CSV file not found: {csv_file_path}")
return False
except Exception as e:
print(f"❌ Error reading CSV file: {e}")
return False
finally:
# Close database connection
db.close_connection()
if __name__ == "__main__":
csv_file = "sept.csv"
success = import_csv_data(csv_file)
if success:
print("\n🚀 You can now run the Kivy app to view the imported data:")
print(" python main.py")
print(" or")
print(" ./run_app.sh")
else:
print("\n❌ Import failed. Please check the errors above.")