{"library":"records","title":"Records: SQL for Humans","description":"Records is a simple yet powerful Python library designed for making raw SQL queries to various relational databases with an elegant interface. It aims to reduce boilerplate code associated with common database tasks. The current version, 0.6.0, includes support for SQLAlchemy v2, making it compatible with modern database backends. Releases are infrequent but tend to include significant updates.","language":"python","status":"active","last_verified":"Sun May 17","install":{"commands":["pip install records","pip install records[pandas]"],"cli":null},"imports":["import records\ndb = records.Database(...)"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import records\nimport os\n\n# Example using SQLite in-memory or a database URL from an environment variable\n# For other databases, change the connection string, e.g., \n# \"postgres://user:pass@host:port/dbname\"\ndatabase_url = os.environ.get('DATABASE_URL', 'sqlite:///:memory:')\ndb = records.Database(database_url)\n\n# Create a table and insert data (example for SQLite)\nif 'sqlite' in database_url:\n    db.query('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)')\n    db.query('INSERT INTO users (name, age) VALUES (:name, :age)', name='Alice', age=30)\n    db.query('INSERT INTO users (name, age) VALUES (:name, :age)', name='Bob', age=24)\n\n# Run a query\nrows = db.query('SELECT * FROM users WHERE age > :min_age', min_age=25)\n\n# Iterate over results\nprint('Users over 25:')\nfor row in rows:\n    print(f\"  Name: {row.name}, Age: {row.age}\")\n\n# Access columns by name or index\nfirst_row = rows.first()\nif first_row:\n    print(f\"First user found: {first_row.name}\")\n\n# Export to CSV (requires tablib)\n# print(rows.export('csv'))\n\n# Export to Pandas DataFrame (requires pandas)\n# df = rows.export('df')\n# print(df.head())\n\n# Close the connection (important for some databases)\ndb.close()","lang":"python","description":"This quickstart demonstrates how to connect to a database (using an in-memory SQLite by default or a URL from an environment variable), execute a parameterized query, iterate through results, and access data from a `Record` object. It highlights basic CRUD operations and the importance of parameterized queries for security.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-17","installed_version":"0.6.0","pypi_latest":"0.6.0","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":7.4,"avg_import_s":0.66,"wheel_type":"sdist"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"records","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.51,"mem_mb":15.7,"disk_size":"47.3M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pandas","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.5,"mem_mb":15.7,"disk_size":"194.1M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"records","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":4.1,"import_time_s":0.38,"mem_mb":15.7,"disk_size":"46M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pandas","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":9.8,"import_time_s":0.37,"mem_mb":15.7,"disk_size":"185M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"records","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.76,"mem_mb":17.9,"disk_size":"53.4M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pandas","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.76,"mem_mb":17.9,"disk_size":"211.0M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"records","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":3.9,"import_time_s":0.69,"mem_mb":17.9,"disk_size":"52M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pandas","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":9.4,"import_time_s":0.68,"mem_mb":17.9,"disk_size":"201M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"records","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.86,"mem_mb":17.7,"disk_size":"42.6M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pandas","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.86,"mem_mb":17.7,"disk_size":"193.6M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"records","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":4.7,"import_time_s":0.84,"mem_mb":17.7,"disk_size":"41M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pandas","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":10.4,"import_time_s":0.85,"mem_mb":17.7,"disk_size":"183M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"records","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.83,"mem_mb":18,"disk_size":"42.1M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pandas","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.83,"mem_mb":18,"disk_size":"192.3M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"records","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":4.5,"import_time_s":0.77,"mem_mb":18,"disk_size":"41M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pandas","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":10.2,"import_time_s":0.78,"mem_mb":18,"disk_size":"182M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"records","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.47,"mem_mb":15.4,"disk_size":"45.9M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pandas","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.48,"mem_mb":15.4,"disk_size":"201.1M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"records","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":4.8,"import_time_s":0.46,"mem_mb":15.4,"disk_size":"45M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pandas","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":11.8,"import_time_s":0.43,"mem_mb":15.4,"disk_size":"195M"}]}}