SQLAlchemy is a Python-SQL-Toolkit and object-relational mapper.
SQLAlchemy is known for its ORM, whereby it provides different patterns for object-relational mapping, whereby classes can be mapped to the database in different ways. The object model and the database schema are cleanly decoupled from the start.
SQLAlchemy differs fundamentally from other ORMs, as SQL and details of the object relation are not abstracted away: all processes are represented as a collection of individual tools.
SQLAlchemy supports PostgreSQL as well as other dialects of relational databases:
| Dialects | Python package | import | Docs |
|---|---|---|---|
| postgresql | psycopg2-binary | psycopg2 | Installation |
| mysql | mysqlclient | MySQLdb | README |
| mssql | pyodbc | pyodbc | Wiki |
| oracle | cx_oracle | cx_Oracle | cx_Oracle |
from sqlalchemy import create_engine
engine = create_engine("postgresql:///example", echo=True)from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
Base = declarative_base()
class Address(Base):
__tablename__ = "address"
id = Column(Integer, primary_key=True)
street = Column(String)
zipcode = Column(String)
country = Column(String, nullable=False)
class Contact(Base):
__tablename__ = "contact"
id = Column(Integer, primary_key=True)
firstname = Column(String, nullable=False)
lastname = Column(String, nullable=False)
email = Column(String, nullable=False)
address_id = Column(Integer, ForeignKey(Address.id), nullable=False)
address = relationship("Address")Base.metadata.create_all(engine)session = Session(engine)
address = Address(street="Birnbaumweg 10", zipcode="79115", country="Germany")
contact = Contact(
firstname="Veit", lastname="Schiele", email="veit@cusy.io", address=address
)
session.add(contact)
session.commit()contact = session.query(Contact).filter_by(email="veit@cusy.io").first()
print(contact.firstname)
contacts = session.query(Contact).all()
for contact in contacts:
print(contact.firstname)
contacts = session.query(Contact).filter_by(email="veit@cusy.io").all()
for contact in contacts:
print(contact.firstname)contact = session.query(Contact).filter_by(email="veit@cusy.io").first()
contact.email = "info@veit-schiele.de"
session.add(contact)
session.commit()contact = (
session.query(Contact).filter_by(email="info@veit-schiele.de").first()
)
session.delete(contact)
session.commit()- SQLAlchemy-Continuum
- Versioning and revision extension for SQLAlchemy
- SQLAlchemy-Utc
- SQLAlchemy type for storing datetime.datetime values
- SQLAlchemy-Utils
- Various utility functions, new data types and utilities for SQLAlchemy
- DEPOT
- Framework for easy storage and retrieval of files in web applications
- SQLAlchemy-ImageAttach
- RSQLAlchemy extension for attaching images to entity objects
- SQLAlchemy-Searchable
- Full-text searchable models for SQLAlchemy
.. seealso:: * `Awesome SQLAlchemy <https://github.com/dahlia/awesome-sqlalchemy>`_