codekingpro/portable-devtools
114k
1Metadata-Version: 2.1
2Name: SQLAlchemy
3Version: 2.0.30
4Summary: Database Abstraction Library
5Home-page: https://www.sqlalchemy.org
6Author: Mike Bayer
7Author-email: mike_mp@zzzcomputing.com
8License: MIT
9Project-URL: Documentation, https://docs.sqlalchemy.org
10Project-URL: Issue Tracker, https://github.com/sqlalchemy/sqlalchemy/
11Classifier: Development Status :: 5 - Production/Stable
12Classifier: Intended Audience :: Developers
13Classifier: License :: OSI Approved :: MIT License
14Classifier: Operating System :: OS Independent
15Classifier: Programming Language :: Python
16Classifier: Programming Language :: Python :: 3
17Classifier: Programming Language :: Python :: 3.7
18Classifier: Programming Language :: Python :: 3.8
19Classifier: Programming Language :: Python :: 3.9
20Classifier: Programming Language :: Python :: 3.10
21Classifier: Programming Language :: Python :: 3.11
22Classifier: Programming Language :: Python :: 3.12
23Classifier: Programming Language :: Python :: Implementation :: CPython
24Classifier: Programming Language :: Python :: Implementation :: PyPy
25Classifier: Topic :: Database :: Front-Ends
26Requires-Python: >=3.7
27Description-Content-Type: text/x-rst
28License-File: LICENSE
29Requires-Dist: typing-extensions >=4.6.0
30Requires-Dist: greenlet !=0.4.17 ; platform_machine == "aarch64" or (platform_machine == "ppc64le" or (platform_machine == "x86_64" or (platform_machine == "amd64" or (platform_machine == "AMD64" or (platform_machine == "win32" or platform_machine == "WIN32")))))
31Requires-Dist: importlib-metadata ; python_version < "3.8"
32Provides-Extra: aiomysql
33Requires-Dist: greenlet !=0.4.17 ; extra == 'aiomysql'
34Requires-Dist: aiomysql >=0.2.0 ; extra == 'aiomysql'
35Provides-Extra: aioodbc
36Requires-Dist: greenlet !=0.4.17 ; extra == 'aioodbc'
37Requires-Dist: aioodbc ; extra == 'aioodbc'
38Provides-Extra: aiosqlite
39Requires-Dist: greenlet !=0.4.17 ; extra == 'aiosqlite'
40Requires-Dist: aiosqlite ; extra == 'aiosqlite'
41Requires-Dist: typing-extensions !=3.10.0.1 ; extra == 'aiosqlite'
42Provides-Extra: asyncio
43Requires-Dist: greenlet !=0.4.17 ; extra == 'asyncio'
44Provides-Extra: asyncmy
45Requires-Dist: greenlet !=0.4.17 ; extra == 'asyncmy'
46Requires-Dist: asyncmy !=0.2.4,!=0.2.6,>=0.2.3 ; extra == 'asyncmy'
47Provides-Extra: mariadb_connector
48Requires-Dist: mariadb !=1.1.2,!=1.1.5,>=1.0.1 ; extra == 'mariadb_connector'
49Provides-Extra: mssql
50Requires-Dist: pyodbc ; extra == 'mssql'
51Provides-Extra: mssql_pymssql
52Requires-Dist: pymssql ; extra == 'mssql_pymssql'
53Provides-Extra: mssql_pyodbc
54Requires-Dist: pyodbc ; extra == 'mssql_pyodbc'
55Provides-Extra: mypy
56Requires-Dist: mypy >=0.910 ; extra == 'mypy'
57Provides-Extra: mysql
58Requires-Dist: mysqlclient >=1.4.0 ; extra == 'mysql'
59Provides-Extra: mysql_connector
60Requires-Dist: mysql-connector-python ; extra == 'mysql_connector'
61Provides-Extra: oracle
62Requires-Dist: cx-oracle >=8 ; extra == 'oracle'
63Provides-Extra: oracle_oracledb
64Requires-Dist: oracledb >=1.0.1 ; extra == 'oracle_oracledb'
65Provides-Extra: postgresql
66Requires-Dist: psycopg2 >=2.7 ; extra == 'postgresql'
67Provides-Extra: postgresql_asyncpg
68Requires-Dist: greenlet !=0.4.17 ; extra == 'postgresql_asyncpg'
69Requires-Dist: asyncpg ; extra == 'postgresql_asyncpg'
70Provides-Extra: postgresql_pg8000
71Requires-Dist: pg8000 >=1.29.1 ; extra == 'postgresql_pg8000'
72Provides-Extra: postgresql_psycopg
73Requires-Dist: psycopg >=3.0.7 ; extra == 'postgresql_psycopg'
74Provides-Extra: postgresql_psycopg2binary
75Requires-Dist: psycopg2-binary ; extra == 'postgresql_psycopg2binary'
76Provides-Extra: postgresql_psycopg2cffi
77Requires-Dist: psycopg2cffi ; extra == 'postgresql_psycopg2cffi'
78Provides-Extra: postgresql_psycopgbinary
79Requires-Dist: psycopg[binary] >=3.0.7 ; extra == 'postgresql_psycopgbinary'
80Provides-Extra: pymysql
81Requires-Dist: pymysql ; extra == 'pymysql'
82Provides-Extra: sqlcipher
83Requires-Dist: sqlcipher3-binary ; extra == 'sqlcipher'
84
85SQLAlchemy
86==========
87
88|PyPI| |Python| |Downloads|
89
90.. |PyPI| image:: https://img.shields.io/pypi/v/sqlalchemy
91 :target: https://pypi.org/project/sqlalchemy
92 :alt: PyPI
93
94.. |Python| image:: https://img.shields.io/pypi/pyversions/sqlalchemy
95 :target: https://pypi.org/project/sqlalchemy
96 :alt: PyPI - Python Version
97
98.. |Downloads| image:: https://static.pepy.tech/badge/sqlalchemy/month
99 :target: https://pepy.tech/project/sqlalchemy
100 :alt: PyPI - Downloads
101
102
103The Python SQL Toolkit and Object Relational Mapper
104
105Introduction
106-------------
107
108SQLAlchemy is the Python SQL toolkit and Object Relational Mapper
109that gives application developers the full power and
110flexibility of SQL. SQLAlchemy provides a full suite
111of well known enterprise-level persistence patterns,
112designed for efficient and high-performing database
113access, adapted into a simple and Pythonic domain
114language.
115
116Major SQLAlchemy features include:
117
118* An industrial strength ORM, built
119 from the core on the identity map, unit of work,
120 and data mapper patterns. These patterns
121 allow transparent persistence of objects
122 using a declarative configuration system.
123 Domain models
124 can be constructed and manipulated naturally,
125 and changes are synchronized with the
126 current transaction automatically.
127* A relationally-oriented query system, exposing
128 the full range of SQL's capabilities
129 explicitly, including joins, subqueries,
130 correlation, and most everything else,
131 in terms of the object model.
132 Writing queries with the ORM uses the same
133 techniques of relational composition you use
134 when writing SQL. While you can drop into
135 literal SQL at any time, it's virtually never
136 needed.
137* A comprehensive and flexible system
138 of eager loading for related collections and objects.
139 Collections are cached within a session,
140 and can be loaded on individual access, all
141 at once using joins, or by query per collection
142 across the full result set.
143* A Core SQL construction system and DBAPI
144 interaction layer. The SQLAlchemy Core is
145 separate from the ORM and is a full database
146 abstraction layer in its own right, and includes
147 an extensible Python-based SQL expression
148 language, schema metadata, connection pooling,
149 type coercion, and custom types.
150* All primary and foreign key constraints are
151 assumed to be composite and natural. Surrogate
152 integer primary keys are of course still the
153 norm, but SQLAlchemy never assumes or hardcodes
154 to this model.
155* Database introspection and generation. Database
156 schemas can be "reflected" in one step into
157 Python structures representing database metadata;
158 those same structures can then generate
159 CREATE statements right back out - all within
160 the Core, independent of the ORM.
161
162SQLAlchemy's philosophy:
163
164* SQL databases behave less and less like object
165 collections the more size and performance start to
166 matter; object collections behave less and less like
167 tables and rows the more abstraction starts to matter.
168 SQLAlchemy aims to accommodate both of these
169 principles.
170* An ORM doesn't need to hide the "R". A relational
171 database provides rich, set-based functionality
172 that should be fully exposed. SQLAlchemy's
173 ORM provides an open-ended set of patterns
174 that allow a developer to construct a custom
175 mediation layer between a domain model and
176 a relational schema, turning the so-called
177 "object relational impedance" issue into
178 a distant memory.
179* The developer, in all cases, makes all decisions
180 regarding the design, structure, and naming conventions
181 of both the object model as well as the relational
182 schema. SQLAlchemy only provides the means
183 to automate the execution of these decisions.
184* With SQLAlchemy, there's no such thing as
185 "the ORM generated a bad query" - you
186 retain full control over the structure of
187 queries, including how joins are organized,
188 how subqueries and correlation is used, what
189 columns are requested. Everything SQLAlchemy
190 does is ultimately the result of a developer-initiated
191 decision.
192* Don't use an ORM if the problem doesn't need one.
193 SQLAlchemy consists of a Core and separate ORM
194 component. The Core offers a full SQL expression
195 language that allows Pythonic construction
196 of SQL constructs that render directly to SQL
197 strings for a target database, returning
198 result sets that are essentially enhanced DBAPI
199 cursors.
200* Transactions should be the norm. With SQLAlchemy's
201 ORM, nothing goes to permanent storage until
202 commit() is called. SQLAlchemy encourages applications
203 to create a consistent means of delineating
204 the start and end of a series of operations.
205* Never render a literal value in a SQL statement.
206 Bound parameters are used to the greatest degree
207 possible, allowing query optimizers to cache
208 query plans effectively and making SQL injection
209 attacks a non-issue.
210
211Documentation
212-------------
213
214Latest documentation is at:
215
216https://www.sqlalchemy.org/docs/
217
218Installation / Requirements
219---------------------------
220
221Full documentation for installation is at
222`Installation <https://www.sqlalchemy.org/docs/intro.html#installation>`_.
223
224Getting Help / Development / Bug reporting
225------------------------------------------
226
227Please refer to the `SQLAlchemy Community Guide <https://www.sqlalchemy.org/support.html>`_.
228
229Code of Conduct
230---------------
231
232Above all, SQLAlchemy places great emphasis on polite, thoughtful, and
233constructive communication between users and developers.
234Please see our current Code of Conduct at
235`Code of Conduct <https://www.sqlalchemy.org/codeofconduct.html>`_.
236
237License
238-------
239
240SQLAlchemy is distributed under the `MIT license
241<https://www.opensource.org/licenses/mit-license.php>`_.
242
243 