feat: Add SQL script export option

- Added functionality to export the full database schema (CREATE statements) and data (INSERT statements) as a single `.sql` file.
- Created a new route `/export/database.sql` in `routes/export.py`.
- Added helper functions to `routes/export.py` (adapted from `sql_explorer`) to generate schema CREATE statements and data INSERT statements.
- Added a download link for the SQL export to the Settings page (`templates/settings.html`).
- Updated the changelog entry for data export to include the SQL option.
This commit is contained in:
Peter Stockings
2025-04-12 21:17:19 +10:00
parent 2d67badd32
commit 62e203bc2a
4 changed files with 283 additions and 0 deletions

View File

@@ -10,6 +10,18 @@
<div class="prose max-w-none">
<p>Updates and changes to the site will be documented here, with the most recent changes listed first.</p>
<!-- New Entry for Data Export -->
<hr class="my-6">
<h2 class="text-xl font-semibold mb-2">April 12, 2025</h2>
<ul class="list-disc pl-5 space-y-1">
<li>Added functionality to export data from the Settings page:</li>
<ul class="list-disc pl-5 space-y-1">
<li>Export all workout set data as a CSV file.</li>
<li>Export full database schema (CREATE statements) and data (INSERT statements) as an SQL script.
</li>
</ul>
</ul>
<!-- New Entry for SQL Generation -->
<hr class="my-6">
<h2 class="text-xl font-semibold mb-2">April 5, 2025</h2>

View File

@@ -182,6 +182,39 @@
</div>
<!-- Data Export Section -->
<div class="bg-white shadow rounded-lg p-4 sm:p-6 xl:p-8 mb-8">
<div class="mb-4 flex items-center justify-between">
<div>
<h3 class="text-xl font-bold text-gray-900 mb-2">Data Export</h3>
</div>
</div>
<div class="flex flex-col space-y-4"> <!-- Added space-y-4 for spacing between buttons -->
<p class="text-sm text-gray-600">Download all workout set data as a CSV file, or the entire database
structure and data as an SQL script.</p>
<a href="{{ url_for('export.export_workouts_csv') }}" class="text-white bg-green-600 hover:bg-green-700 focus:ring-4 focus:ring-green-300 font-medium
rounded-lg text-sm px-5 py-2.5 text-center inline-flex items-center justify-center w-full sm:w-auto">
<svg class="w-5 h-5 mr-2 -ml-1" fill="currentColor" viewBox="0 0 20 20"
xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd"
d="M6 2a2 2 0 00-2 2v12a2 2 0 002 2h8a2 2 0 002-2V7.414A2 2 0 0015.414 6L12 2.586A2 2 0 0010.586 2H6zm5 6a1 1 0 10-2 0v3.586l-1.293-1.293a1 1 0 10-1.414 1.414l3 3a1 1 0 001.414 0l3-3a1 1 0 00-1.414-1.414L11 11.586V8z"
clip-rule="evenodd"></path>
</svg>
Export All Workouts (CSV)
</a>
<a href="{{ url_for('export.export_database_sql') }}"
class="text-white bg-blue-600 hover:bg-blue-700 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center inline-flex items-center justify-center w-full sm:w-auto">
<svg class="w-5 h-5 mr-2 -ml-1" fill="currentColor" viewBox="0 0 20 20"
xmlns="http://www.w3.org/2000/svg">
<path
d="M2 5a2 2 0 012-2h12a2 2 0 012 2v10a2 2 0 01-2 2H4a2 2 0 01-2-2V5zm3.293 1.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z"
clip-rule="evenodd"></path>
</svg> <!-- Using a generic download/database icon -->
Export Database (SQL Script)
</a>
</div>
</div>
</div>
{% endblock %}