This page should summarize topics for the DB API 3.0. It is meant to provide
A related page is ExtendingTheDbApi, which lists features that aren't general enough to make it into the spec.
Discussions should be held at db-sig@python.org, with summaries (even preliminary ones) entered here. This is also the place where limits imposed by the underlying database/library implementation should be entered for further reference. It could also be used as a place for technical voting by the driver authors (with tags like 'personal preference', 'trivial to implement', 'difficult to implement', 'implementable only with loss of performance' etc.)
Prior ArtStuart Bishop posted a DB-API 3.0 strawman in 2001, which can be found on the Aug2001DbApi3Strawman page.
Possibilities
see sqlliterals for some tokenisers
using pyformat, with strings of the form %(identifier)s explicitly forbidden in SQL literals. Easy to implement and the error situations are clearly defined, in contrast to a real tokenizer, where the error situations are more subtle
Driver authors should list with each style how easy they could be implemented. 'Native' means that the SQL can be passed directly to the database, 'tokenize' means that the driver would have to tokenize the SQL. 'tokenize, already implemented' if the current driver tokenizes the SQL already in the current implementation.
Because it's mostly a feature of the database where some style is native, this should list the database name. If it a driver specic decision, then the driver name should be listed.
qmark: WHERE a = ?Is this useful at all? If Oracle uses them simply as an indicator of 'pass by position' without regard to the actual numbers, then this style is confusing at best.
Possible settings for the writable paramstyle are implementation-defined but must include at least 'qmark' and 'named'. Attempting to set an illegal paramstyle will raise a ValueError.
Prepared statements in addition to Connection and Cursor. Related is the idea of statement caching:
cursor.execute ("SELECT where size = :size", {'size': localvar}) vs.cursor.execute ("SELECT where size = :size", size = localvar)
cursor.execute ("SELECT where size = ?", [localvar]) vs. cursor.execute ("SELECT where size = ?", localvar)
Currently, DB-API 2.0 loosely defines transactions at the level of a connection. However, many drivers provide extensions that allow multiple (distinct, nested, or both) transactions to exist on a given connection. Maybe it is time for a next generation DB-API to better formalize the transactional scope of a connection. Backends and drivers that wish to allow multiple concurrent transactions will have to implement a simple connection pool so that the same physical connection can be shared by multiple logical DB-API connection objects. Of course, this alters the concept of a connection and may require even more infrastructure to support. i.e., a developer could request an unshared connection so that global (physical) connection variables can be changed in isolation.
Also, some thought should be directed towards properly handling the semantics of nested transactions, as more and more backends are now supporting them.
Schema Information Role of the DB API specRetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4