Registry / storage / sqlalchemy-file

sqlalchemy-file

JSON →
library0.6.0pypypi✓ verified 83d ago

SQLAlchemy-file is a SQLAlchemy extension for attaching files to SQLAlchemy models and uploading them to various storage backends (local, S3, GCS, etc.). Current version: 0.6.0. Release cadence: irregular, with occasional minor releases.

pip install sqlalchemy-file
INSTALL
IMPORT
SIG · SQLALCHEMY-FILE
S
sqlalchemy-file
storagepythonv0.6.0
harness data pending
Install & Compatibility
Where this runs

No compatibility data collected yet for this library.

Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

File
from sqlalchemy_file import File
from sqlalchemy_file import File as OldFile
Old import paths from pre-0.5.0 may exist; use this.
ImageField
from sqlalchemy_file import ImageField
from sqlalchemy_file.fields import ImageField
ImageField is directly importable from the main module since v0.5.0.

Basic usage: define a model with a FileField column, attach files via Attach object.

from sqlalchemy import create_engine, Column, Integer from sqlalchemy.orm import declarative_base from sqlalchemy_file import File, FileField Base = declarative_base() engine = create_engine('sqlite:///:memory:') class User(Base): __tablename__ = 'user' id = Column(Integer, primary_key=True) avatar = Column(FileField) Base.metadata.create_all(engine) from sqlalchemy.orm import Session from sqlalchemy_file import Attach with Session(engine) as session: user = User() user.avatar = Attach('path/to/avatar.jpg', content_type='image/jpeg') session.add(user) session.commit() print(user.avatar.url)
Debug
Known issues
breakingIn v0.5.0+, the import path for ImageField changed; it must be imported from sqlalchemy_file directly, not from a submodule.
fix
Use 'from sqlalchemy_file import ImageField' instead of 'from sqlalchemy_file.fields import ImageField'.
affects: >=0.5.0
gotchaFile doesn't use a standard Column type; it requires FileField which is a custom type. Mistakenly using Column(File) will break.
fix
Use Column(FileField) not Column(File).
affects: all
deprecatedUploading via dict (e.g., avatar={'filename': 'a.jpg', 'file': open(...)}) is deprecated in favor of Attach objects.
fix
Use Attach object: user.avatar = Attach(filepath_or_fileobj, ...).
affects: <0.6.0
Errors
Common errors & fixes
AttributeError: 'File' object has no attribute 'url'
Accessing url on a File instance before attaching to a model or after deletion.
fix
Ensure the file is attached to a model instance and committed. Use user.avatar.url after session.commit().
sqlalchemy.exc.CompileError: Can't generate DDL for Column type FileField; is it a mapped column?
Using FileField without proper SQLAlchemy column declaration or missing SQLAlchemy-file extension.
fix
Declare the column as Column(FileField) and ensure the model inherits from declarative_base.
ImportError: cannot import name 'FileField' from 'sqlalchemy_file'
Outdated version of sqlalchemy-file (<0.5.0) where FileField was not exported from top-level.
fix
Upgrade to >=0.5.0: pip install --upgrade sqlalchemy-file.
Upgrade
Version history
0.6.0latest on PyPI · released Oct 7, 2023
Audit
Dependencies
sqlalchemyrequiredRequired: core ORM dependency
boto3optionalRequired for S3 storage backend
google-cloud-storageoptionalRequired for GCS storage backend
Agent activity
41 hits · last 30 days
node
32
Meta
2
OpenAI (training)
1
Resources
sqlalchemy-file — pip install sqlalchemy-file · libregistry