SQLAlchemy
   HOME

TheInfoList



OR:

SQLAlchemy is an
open-source Open source is source code that is made freely available for possible modification and redistribution. Products include permission to use and view the source code, design documents, or content of the product. The open source model is a decentrali ...
Python library that provides an
SQL Structured Query Language (SQL) (pronounced ''S-Q-L''; or alternatively as "sequel") is a domain-specific language used to manage data, especially in a relational database management system (RDBMS). It is particularly useful in handling s ...
toolkit (called "SQLAlchemy Core") and an object–relational mapper (ORM) for database interactions. It allows developers to work with databases using Python objects, enabling efficient and flexible database access.


Description

SQLAlchemy offers tools for
database schema The database schema is the structure of a database described in a formal language supported typically by a relational database management system (RDBMS). The term "wikt:schema, schema" refers to the organization of data as a blueprint of how the ...
generation, querying, and object-relational mapping. Key features include: * A comprehensive embedded
domain-specific language A domain-specific language (DSL) is a computer language specialized to a particular application domain. This is in contrast to a general-purpose language (GPL), which is broadly applicable across domains. There are a wide variety of DSLs, ranging ...
for SQL in Python called "SQLAlchemy Core" that provides means to construct and execute SQL queries. * A powerful ORM that allows the mapping of Python classes to database tables. * Support for database schema migrations. * Compatibility with multiple database backends. * Tools for
database connection A database connection is a facility in computer science that allows client software to talk to database server software, whether on the same machine or not. A connection is required to send commands and receive answers, usually in the form of a ...
pooling and transaction management.


History

SQLAlchemy was first released in February 2006. It has evolved to include a wide range of features for database interaction and has gained popularity among Python developers. Notable versions include: * Version 0.1 (2006): Initial release. * Version 1.0 (2015): Major enhancements in ORM and SQL expression language. * Version 1.4 (2021): Introduction of a new ORM
API An application programming interface (API) is a connection between computers or between computer programs. It is a type of software interface, offering a service to other pieces of software. A document or standard that describes how to build ...
.


Example

The following example represents an n-to-1 relationship between movies and their directors. It is shown how user-defined Python classes create corresponding database tables, how instances with relationships are created from either side of the relationship, and finally how the data can be queried — illustrating automatically generated SQL queries for both lazy and eager loading.


Schema definition

Creating two Python classes and corresponding database tables in the DBMS: from sqlalchemy import * from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relation, sessionmaker Base = declarative_base() class Movie(Base): __tablename__ = "movies" id = Column(Integer, primary_key=True) title = Column(String(255), nullable=False) year = Column(Integer) directed_by = Column(Integer, ForeignKey("directors.id")) director = relation("Director", backref="movies", lazy=False) def __init__(self, title=None, year=None): self.title = title self.year = year def __repr__(self): return f"Movie(, , )" class Director(Base): __tablename__ = "directors" id = Column(Integer, primary_key=True) name = Column(String(50), nullable=False, unique=True) def __init__(self, name=None): self.name = name def __repr__(self): return f"Director()" engine = create_engine("dbms://user:pwd@host/dbname") Base.metadata.create_all(engine)


Data insertion

One can insert a director-movie relationship via either entity: Session = sessionmaker(bind=engine) session = Session() m1 = Movie("Robocop", 1987) m1.director = Director("Paul Verhoeven") d2 = Director("George Lucas") d2.movies = ovie("Star Wars", 1977), Movie("THX 1138", 1971) try: session.add(m1) session.add(d2) session.commit() except: session.rollback()


Querying

alldata = session.query(Movie).all() for somedata in alldata: print(somedata) SQLAlchemy issues the following query to the DBMS (omitting aliases): SELECT movies.id, movies.title, movies.year, movies.directed_by, directors.id, directors.name FROM movies LEFT OUTER JOIN directors ON directors.id = movies.directed_by The output: Movie('Robocop', 1987L, Director('Paul Verhoeven')) Movie('Star Wars', 1977L, Director('George Lucas')) Movie('THX 1138', 1971L, Director('George Lucas')) Setting lazy=True (default) instead, SQLAlchemy would first issue a query to get the list of movies and only when needed (lazy) for each director a query to get the name of the corresponding director: SELECT movies.id, movies.title, movies.year, movies.directed_by FROM movies SELECT directors.id, directors.name FROM directors WHERE directors.id = %s


See also

* SQLObject *
Storm A storm is any disturbed state of the natural environment or the atmosphere of an astronomical body. It may be marked by significant disruptions to normal conditions such as strong wind, tornadoes, hail, thunder and lightning (a thunderstor ...
* Pylons *
TurboGears TurboGears is a Python web application framework consisting of several WSGI components such as WebOb, SQLAlchemyKajikitemplate language and Repoze. TurboGears is designed around the model–view–controller (MVC) architecture, much like ...
* Cubes (OLAP server)


References

;Notes * * Rick Copeland, Essential SQLAlchemy,
O'Reilly O'Reilly () is a common Irish surname. The O'Reillys were historically the kings of East Bréifne in what is today County Cavan. The clan were part of the Connachta's Uí Briúin Bréifne kindred and were closely related to the Ó Ruairc ( ...
, 2008, {{ISBN, 0-596-51614-2 2006 software Object–relational mapping Python (programming language) libraries Software using the MIT license