database-management

安装量: 62
排名: #12101

安装

npx skills add https://github.com/autumnsgrove/groveengine --skill database-management
Database Management Skill
When to Activate
Activate this skill when:
Setting up database functionality
Creating database schemas
Implementing data persistence
Writing database queries
Working with SQLite or any database
IMPORTANT
This is MANDATORY for all projects requiring database functionality.
Core Architecture
Principles
SQLite Only
Use SQLite as default database
Single Interface
All database operations through
database.py
Complete SQL Isolation
All SQL statements in
database.py
Function-Based
Simple, reusable function interface File Structure project/ ├── database.py # ALL SQL lives here ├── app.py # Uses database functions (no SQL!) └── tests/ └── test_database.py Standard Interface Pattern

database.py - All database code lives here

import sqlite3 from typing import List , Dict , Optional , Any DB_PATH = "app.db" def get_connection ( db_path : str = DB_PATH ) -

sqlite3 . Connection : conn = sqlite3 . connect ( db_path ) conn . row_factory = sqlite3 . Row return conn def init_db ( db_path : str = DB_PATH ) -

None : """Initialize database with schema.""" conn = get_connection ( db_path ) cursor = conn . cursor ( ) cursor . execute ( """ CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, email TEXT UNIQUE NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) """ ) conn . commit ( ) conn . close ( ) def db_query ( query : str , params : tuple = ( ) ) -

List [ Dict [ str , Any ] ] : """Execute SELECT query and return results.""" conn = get_connection ( ) cursor = conn . cursor ( ) cursor . execute ( query , params ) rows = cursor . fetchall ( ) conn . close ( ) return [ dict ( row ) for row in rows ] def db_execute ( query : str , params : tuple = ( ) ) -

int : """Execute INSERT/UPDATE/DELETE and return affected rows.""" conn = get_connection ( ) cursor = conn . cursor ( ) cursor . execute ( query , params ) conn . commit ( ) affected = cursor . rowcount conn . close ( ) return affected def db_insert ( query : str , params : tuple = ( ) ) -

int : """Execute INSERT and return last row ID.""" conn = get_connection ( ) cursor = conn . cursor ( ) cursor . execute ( query , params ) conn . commit ( ) last_id = cursor . lastrowid conn . close ( ) return last_id Domain-Specific Functions

Add to database.py - Clean API for application code

def get_user_by_id ( user_id : int ) -

Optional [ Dict [ str , Any ] ] : """Get user by ID.""" results = db_query ( "SELECT * FROM users WHERE id = ?" , ( user_id , ) ) return results [ 0 ] if results else None def get_user_by_email ( email : str ) -

Optional [ Dict [ str , Any ] ] : """Get user by email.""" results = db_query ( "SELECT * FROM users WHERE email = ?" , ( email , ) ) return results [ 0 ] if results else None def create_user ( username : str , email : str ) -

int : """Create new user and return ID.""" return db_insert ( "INSERT INTO users (username, email) VALUES (?, ?)" , ( username , email ) ) def delete_user ( user_id : int ) -

bool : """Delete user by ID.""" return db_execute ( "DELETE FROM users WHERE id = ?" , ( user_id , ) )

0 Application Usage

app.py - NO SQL HERE!

from database import init_db , get_user_by_id , create_user def main ( ) : init_db ( )

Create user (no SQL!)

user_id

create_user ( "alice" , "alice@example.com" ) print ( f"Created user: { user_id } " )

Get user (no SQL!)

user

get_user_by_id ( user_id ) print ( f"User: { user [ 'username' ] } " ) Anti-Patterns to Avoid ❌ WRONG: SQL in application code def process_user ( user_id ) : conn = sqlite3 . connect ( 'app.db' ) cursor = conn . cursor ( ) cursor . execute ( "SELECT * FROM users WHERE id = ?" , ( user_id , ) ) ✅ CORRECT: Use database functions def process_user ( user_id ) : user = get_user_by_id ( user_id ) Security: Always Use Parameters

❌ WRONG: SQL injection vulnerability!

query

f"SELECT * FROM users WHERE email = ' { email } '"

✅ CORRECT: Parameterized query

query

"SELECT * FROM users WHERE email = ?" results = db_query ( query , ( email , ) ) Common Patterns Pagination def get_users_paginated ( page : int = 1 , per_page : int = 10 ) : offset = ( page - 1 ) * per_page return db_query ( "SELECT * FROM users ORDER BY created_at DESC LIMIT ? OFFSET ?" , ( per_page , offset ) ) Transactions def db_transaction ( operations : List [ tuple ] ) -

bool : conn = get_connection ( ) cursor = conn . cursor ( ) try : for query , params in operations : cursor . execute ( query , params ) conn . commit ( ) return True except : conn . rollback ( ) return False finally : conn . close ( ) Golden Rules ✅ All SQL in database.py - nowhere else ✅ Parameterized queries - prevent SQL injection ✅ Meaningful return types - Optional, List, bool, int ✅ Transaction support - for multi-operation consistency ✅ * Add .db to .gitignore - don't commit databases Related Resources See AgentUsage/db_usage.md for complete documentation including: Full database.py template Migration patterns Testing database functions Performance optimization

返回排行榜