Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
44850ea1
Kaydet (Commit)
44850ea1
authored
Eyl 14, 2006
tarafından
Georg Brandl
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Backport rev 51866-51868 from trunk (sqlite3 documentation fixes).
üst
af22c52f
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
51 additions
and
48 deletions
+51
-48
libsqlite3.tex
Doc/lib/libsqlite3.tex
+51
-48
No files found.
Doc/lib/libsqlite3.tex
Dosyayı görüntüle @
44850ea1
...
@@ -146,8 +146,8 @@ committed. The \var{timeout} parameter specifies how long the connection should
...
@@ -146,8 +146,8 @@ committed. The \var{timeout} parameter specifies how long the connection should
wait for the lock to go away until raising an exception. The default for the
wait for the lock to go away until raising an exception. The default for the
timeout parameter is 5.0 (five seconds).
timeout parameter is 5.0 (five seconds).
For the
\var
{
isolation
_
level
}
parameter, please see
\member
{
isolation
_
level
}
For the
\var
{
isolation
_
level
}
parameter, please see
the
\member
{
isolation
_
level
}
\ref
{
sqlite3-Connection-IsolationLevel
}
property of
\class
{
Connection
}
objects
.
property of
\class
{
Connection
}
objects in section~
\ref
{
sqlite3-Connection-IsolationLevel
}
.
SQLite natively supports only the types TEXT, INTEGER, FLOAT, BLOB and NULL. If
SQLite natively supports only the types TEXT, INTEGER, FLOAT, BLOB and NULL. If
you want to use other types, like you have to add support for them yourself.
you want to use other types, like you have to add support for them yourself.
...
@@ -197,7 +197,7 @@ This can be used to build a shell for SQLite, like in the following example:
...
@@ -197,7 +197,7 @@ This can be used to build a shell for SQLite, like in the following example:
\verbatiminput
{
sqlite3/complete
_
statement.py
}
\verbatiminput
{
sqlite3/complete
_
statement.py
}
\end{funcdesc}
\end{funcdesc}
\begin{funcdesc}
{
}
enable
_
callback
_
tracebacks
{
flag
}
\begin{funcdesc}
{
enable
_
callback
_
tracebacks
}
{
flag
}
By default you will not get any tracebacks in user-defined functions,
By default you will not get any tracebacks in user-defined functions,
aggregates, converters, authorizer callbacks etc. If you want to debug them,
aggregates, converters, authorizer callbacks etc. If you want to debug them,
you can call this function with
\var
{
flag
}
as True. Afterwards, you will get
you can call this function with
\var
{
flag
}
as True. Afterwards, you will get
...
@@ -212,13 +212,14 @@ A \class{Connection} instance has the following attributes and methods:
...
@@ -212,13 +212,14 @@ A \class{Connection} instance has the following attributes and methods:
\label
{
sqlite3-Connection-IsolationLevel
}
\label
{
sqlite3-Connection-IsolationLevel
}
\begin{memberdesc}
{
isolation
_
level
}
\begin{memberdesc}
{
isolation
_
level
}
Get or set the current isolation level. None for autocommit mode or one of
Get or set the current isolation level. None for autocommit mode or one of
"DEFERRED", "IMMEDIATE" or "EXLUSIVE". See
Controlling Transactions
"DEFERRED", "IMMEDIATE" or "EXLUSIVE". See
``Controlling Transactions'',
\ref
{
sqlite3-Controlling-Transactions
}
for a more detailed explanation.
section~
\ref
{
sqlite3-Controlling-Transactions
}
,
for a more detailed explanation.
\end{memberdesc}
\end{memberdesc}
\begin{methoddesc}
{
cursor
}{
\optional
{
cursorClass
}}
\begin{methoddesc}
{
cursor
}{
\optional
{
cursorClass
}}
The cursor method accepts a single optional parameter
\var
{
cursorClass
}
.
The cursor method accepts a single optional parameter
\var
{
cursorClass
}
.
This is a custom cursor class which must extend
\class
{
sqlite3.Cursor
}
.
If supplied, this must be a custom cursor class that extends
\class
{
sqlite3.Cursor
}
.
\end{methoddesc}
\end{methoddesc}
\begin{methoddesc}
{
execute
}{
sql,
\optional
{
parameters
}}
\begin{methoddesc}
{
execute
}{
sql,
\optional
{
parameters
}}
...
@@ -244,7 +245,7 @@ parameters given.
...
@@ -244,7 +245,7 @@ parameters given.
Creates a user-defined function that you can later use from within SQL
Creates a user-defined function that you can later use from within SQL
statements under the function name
\var
{
name
}
.
\var
{
num
_
params
}
is the number
statements under the function name
\var
{
name
}
.
\var
{
num
_
params
}
is the number
of parameters the function accepts, and
\var
{
func
}
is a Python callable that is
of parameters the function accepts, and
\var
{
func
}
is a Python callable that is
called as SQL function.
called as
the
SQL function.
The function can return any of the types supported by SQLite: unicode, str,
The function can return any of the types supported by SQLite: unicode, str,
int, long, float, buffer and None.
int, long, float, buffer and None.
...
@@ -274,7 +275,7 @@ Example:
...
@@ -274,7 +275,7 @@ Example:
Creates a collation with the specified
\var
{
name
}
and
\var
{
callable
}
. The
Creates a collation with the specified
\var
{
name
}
and
\var
{
callable
}
. The
callable will be passed two string arguments. It should return -1 if the first
callable will be passed two string arguments. It should return -1 if the first
is ordered lower than the second, 0 if they are ordered equal and 1
and
if the
is ordered lower than the second, 0 if they are ordered equal and 1 if the
first is ordered higher than the second. Note that this controls sorting
first is ordered higher than the second. Note that this controls sorting
(ORDER BY in SQL) so your comparisons don't affect other SQL operations.
(ORDER BY in SQL) so your comparisons don't affect other SQL operations.
...
@@ -323,20 +324,21 @@ module.
...
@@ -323,20 +324,21 @@ module.
\begin{memberdesc}
{
row
_
factory
}
\begin{memberdesc}
{
row
_
factory
}
You can change this attribute to a callable that accepts the cursor and
You can change this attribute to a callable that accepts the cursor and
the original row as tuple and will return the real result row. This
the original row as
a
tuple and will return the real result row. This
way, you can implement more advanced ways of returning results,
like
way, you can implement more advanced ways of returning results,
such
ones
that can also access columns by name.
as returning an object
that can also access columns by name.
Example:
Example:
\verbatiminput
{
sqlite3/row
_
factory.py
}
\verbatiminput
{
sqlite3/row
_
factory.py
}
If
the standard tuple types don't suffice for you,
and you want name-based
If
returning a tuple doesn't suffice
and you want name-based
access to columns, you should consider setting
\member
{
row
_
factory
}
to the
access to columns, you should consider setting
\member
{
row
_
factory
}
to the
highly-optimized
sqlite3.Row type. It
provides both
highly-optimized
\class
{
sqlite3.Row
}
type.
\class
{
Row
}
provides both
index-based and case-insensitive name-based access to columns with almost
index-based and case-insensitive name-based access to columns with almost
no memory overhead. Much better than your own custom dictionary-based
no memory overhead. It will probably be better than your own custom
approach or even a db
_
row based solution.
dictionary-based approach or even a db
_
row based solution.
% XXX what's a db_row-based solution?
\end{memberdesc}
\end{memberdesc}
\begin{memberdesc}
{
text
_
factory
}
\begin{memberdesc}
{
text
_
factory
}
...
@@ -350,7 +352,7 @@ module.
...
@@ -350,7 +352,7 @@ module.
attribute to
\constant
{
sqlite3.OptimizedUnicode
}
.
attribute to
\constant
{
sqlite3.OptimizedUnicode
}
.
You can also set it to any other callable that accepts a single bytestring
You can also set it to any other callable that accepts a single bytestring
parameter and returns the result object.
parameter and returns the result
ing
object.
See the following example code for illustration:
See the following example code for illustration:
...
@@ -358,7 +360,7 @@ module.
...
@@ -358,7 +360,7 @@ module.
\end{memberdesc}
\end{memberdesc}
\begin{memberdesc}
{
total
_
changes
}
\begin{memberdesc}
{
total
_
changes
}
Returns the total number of database rows that have be modified, inserted,
Returns the total number of database rows that have be
en
modified, inserted,
or deleted since the database connection was opened.
or deleted since the database connection was opened.
\end{memberdesc}
\end{memberdesc}
...
@@ -385,9 +387,9 @@ This example shows how to use the named style:
...
@@ -385,9 +387,9 @@ This example shows how to use the named style:
\verbatiminput
{
sqlite3/execute
_
2.py
}
\verbatiminput
{
sqlite3/execute
_
2.py
}
\method
{
execute
}
will only execute a single SQL statement. If you try to
\method
{
execute
()
}
will only execute a single SQL statement. If you try to
execute more than one statement with it, it will raise a Warning. Use
execute more than one statement with it, it will raise a Warning. Use
\method
{
executescript
}
if
want to execute multiple SQL statements with one
\method
{
executescript
()
}
if you
want to execute multiple SQL statements with one
call.
call.
\end{methoddesc}
\end{methoddesc}
...
@@ -395,7 +397,7 @@ This example shows how to use the named style:
...
@@ -395,7 +397,7 @@ This example shows how to use the named style:
\begin{methoddesc}
{
executemany
}{
sql, seq
_
of
_
parameters
}
\begin{methoddesc}
{
executemany
}{
sql, seq
_
of
_
parameters
}
Executes a SQL command against all parameter sequences or mappings found in the
Executes a SQL command against all parameter sequences or mappings found in the
sequence
\var
{
sql
}
. The
\module
{
sqlite3
}
module also allows
sequence
\var
{
sql
}
. The
\module
{
sqlite3
}
module also allows
to use
an iterator yielding parameters instead of a sequence.
using
an iterator yielding parameters instead of a sequence.
\verbatiminput
{
sqlite3/executemany
_
1.py
}
\verbatiminput
{
sqlite3/executemany
_
1.py
}
...
@@ -407,7 +409,7 @@ Here's a shorter example using a generator:
...
@@ -407,7 +409,7 @@ Here's a shorter example using a generator:
\begin{methoddesc}
{
executescript
}{
sql
_
script
}
\begin{methoddesc}
{
executescript
}{
sql
_
script
}
This is a nonstandard convenience method for executing multiple SQL statements
This is a nonstandard convenience method for executing multiple SQL statements
at once. It issues a COMMIT statement
before
, then executes the SQL script it
at once. It issues a COMMIT statement
first
, then executes the SQL script it
gets as a parameter.
gets as a parameter.
\var
{
sql
_
script
}
can be a bytestring or a Unicode string.
\var
{
sql
_
script
}
can be a bytestring or a Unicode string.
...
@@ -464,20 +466,19 @@ This is how SQLite types are converted to Python types by default:
...
@@ -464,20 +466,19 @@ This is how SQLite types are converted to Python types by default:
\lineii
{
BLOB
}{
buffer
}
\lineii
{
BLOB
}{
buffer
}
\end{tableii}
\end{tableii}
The type system of the
\module
{
sqlite3
}
module is extensible in
both
ways: you can store
The type system of the
\module
{
sqlite3
}
module is extensible in
two
ways: you can store
additional Python types in a SQLite database via object adaptation, and you can
additional Python types in a SQLite database via object adaptation, and you can
let the
\module
{
sqlite3
}
module convert SQLite types to different Python types via
let the
\module
{
sqlite3
}
module convert SQLite types to different Python types via
converters.
converters.
\subsubsection
{
Using adapters to store additional Python types in SQLite databases
}
\subsubsection
{
Using adapters to store additional Python types in SQLite databases
}
Like
described before, SQLite supports only a limited set of types natively. To
As
described before, SQLite supports only a limited set of types natively. To
use other Python types with SQLite, you must
\strong
{
adapt
}
them to one of the sqlite3
use other Python types with SQLite, you must
\strong
{
adapt
}
them to one of the sqlite3
module's supported types for SQLite
. So,
one of NoneType, int, long, float,
module's supported types for SQLite
:
one of NoneType, int, long, float,
str, unicode, buffer.
str, unicode, buffer.
The
\module
{
sqlite3
}
module uses the Python object adaptation, like described in PEP 246
The
\module
{
sqlite3
}
module uses Python object adaptation, as described in
\pep
{
246
}
for this. The protocol to use is
\class
{
PrepareProtocol
}
.
for this. The protocol to use is
\class
{
PrepareProtocol
}
.
There are two ways to enable the
\module
{
sqlite3
}
module to adapt a custom Python type
There are two ways to enable the
\module
{
sqlite3
}
module to adapt a custom Python type
to one of the supported ones.
to one of the supported ones.
...
@@ -493,8 +494,8 @@ class Point(object):
...
@@ -493,8 +494,8 @@ class Point(object):
self.x, self.y = x, y
self.x, self.y = x, y
\end{verbatim}
\end{verbatim}
Now you want to store the point in a single SQLite column.
Y
ou'll have to
Now you want to store the point in a single SQLite column.
First y
ou'll have to
choose one of the supported types first t
hat you use to represent the point in
.
choose one of the supported types first t
o be used for representing the point
.
Let's just use str and separate the coordinates using a semicolon. Then you
Let's just use str and separate the coordinates using a semicolon. Then you
need to give your class a method
\code
{__
conform
__
(self, protocol)
}
which must
need to give your class a method
\code
{__
conform
__
(self, protocol)
}
which must
return the converted value. The parameter
\var
{
protocol
}
will be
return the converted value. The parameter
\var
{
protocol
}
will be
...
@@ -507,13 +508,13 @@ return the converted value. The parameter \var{protocol} will be
...
@@ -507,13 +508,13 @@ return the converted value. The parameter \var{protocol} will be
The other possibility is to create a function that converts the type to the
The other possibility is to create a function that converts the type to the
string representation and register the function with
\method
{
register
_
adapter
}
.
string representation and register the function with
\method
{
register
_
adapter
}
.
\verbatiminput
{
sqlite3/adapter
_
point
_
2.py
}
\begin{notice}
\begin{notice}
The type/class to adapt must be a new-style class, i. e. it must have
The type/class to adapt must be a new-style class, i. e. it must have
\class
{
object
}
as one of its bases.
\class
{
object
}
as one of its bases.
\end{notice}
\end{notice}
\verbatiminput
{
sqlite3/adapter
_
point
_
2.py
}
The
\module
{
sqlite3
}
module has two default adapters for Python's built-in
The
\module
{
sqlite3
}
module has two default adapters for Python's built-in
\class
{
datetime.date
}
and
\class
{
datetime.datetime
}
types. Now let's suppose
\class
{
datetime.date
}
and
\class
{
datetime.datetime
}
types. Now let's suppose
we want to store
\class
{
datetime.datetime
}
objects not in ISO representation,
we want to store
\class
{
datetime.datetime
}
objects not in ISO representation,
...
@@ -523,16 +524,17 @@ but as a \UNIX{} timestamp.
...
@@ -523,16 +524,17 @@ but as a \UNIX{} timestamp.
\subsubsection
{
Converting SQLite values to custom Python types
}
\subsubsection
{
Converting SQLite values to custom Python types
}
Now that's all nice and dandy that you can
send custom Python types to SQLite.
Writing an adapter lets you
send custom Python types to SQLite.
But to make it really useful we need to make the Python to SQLite to Python
But to make it really useful we need to make the Python to SQLite to Python
roundtrip work.
roundtrip work.
Enter converters.
Enter converters.
Let's go back to the
Point class. We stored the x and y coordinates separated
Let's go back to the
\class
{
Point
}
class. We stored the x and y
via semicolons as strings in SQLite.
coordinates separated
via semicolons as strings in SQLite.
Let's first define a converter function that accepts the string as a parameter and constructs a Point object from it.
First, we'll define a converter function that accepts the string as a
parameter and constructs a
\class
{
Point
}
object from it.
\begin{notice}
\begin{notice}
Converter functions
\strong
{
always
}
get called with a string, no matter
Converter functions
\strong
{
always
}
get called with a string, no matter
...
@@ -558,11 +560,12 @@ database is actually a point. There are two ways of doing this:
...
@@ -558,11 +560,12 @@ database is actually a point. There are two ways of doing this:
\item
Explicitly via the column name
\item
Explicitly via the column name
\end{itemize}
\end{itemize}
Both ways are described at
\ref
{
sqlite3-Module-Contents
}
in the text explaining
Both ways are described in ``Module Constants'', section~
\ref
{
sqlite3-Module-Contents
}
, in
the constants
\constant
{
PARSE
_
DECLTYPES
}
and
\constant
{
PARSE
_
COlNAMES
}
.
the entries for the constants
\constant
{
PARSE
_
DECLTYPES
}
and
\constant
{
PARSE
_
COLNAMES
}
.
The following example illustrates both
way
s.
The following example illustrates both
approache
s.
\verbatiminput
{
sqlite3/converter
_
point.py
}
\verbatiminput
{
sqlite3/converter
_
point.py
}
...
@@ -571,8 +574,8 @@ The following example illustrates both ways.
...
@@ -571,8 +574,8 @@ The following example illustrates both ways.
There are default adapters for the date and datetime types in the datetime
There are default adapters for the date and datetime types in the datetime
module. They will be sent as ISO dates/ISO timestamps to SQLite.
module. They will be sent as ISO dates/ISO timestamps to SQLite.
The default converters are registered under the name "date" for
datetime.date
The default converters are registered under the name "date" for
\class
{
datetime.date
}
and under the name "timestamp" for
datetime.datetime
.
and under the name "timestamp" for
\class
{
datetime.datetime
}
.
This way, you can use date/timestamps from Python without any additional
This way, you can use date/timestamps from Python without any additional
fiddling in most cases. The format of the adapters is also compatible with the
fiddling in most cases. The format of the adapters is also compatible with the
...
@@ -584,12 +587,12 @@ The following example demonstrates this.
...
@@ -584,12 +587,12 @@ The following example demonstrates this.
\subsection
{
Controlling Transactions
\label
{
sqlite3-Controlling-Transactions
}}
\subsection
{
Controlling Transactions
\label
{
sqlite3-Controlling-Transactions
}}
By default, the
\module
{
sqlite3
}
module opens transactions implicitly before a D
ML
By default, the
\module
{
sqlite3
}
module opens transactions implicitly before a D
ata Modification Language (DML)
statement (INSERT/UPDATE/DELETE/REPLACE), and commits transactions implicitly
statement (
i.e.
INSERT/UPDATE/DELETE/REPLACE), and commits transactions implicitly
before a non-DML, non-
DQL
statement (i. e. anything other than
before a non-DML, non-
query
statement (i. e. anything other than
SELECT/INSERT/UPDATE/DELETE/REPLACE).
SELECT/INSERT/UPDATE/DELETE/REPLACE).
So if you are within a transaction
,
and issue a command like
\code
{
CREATE TABLE
So if you are within a transaction and issue a command like
\code
{
CREATE TABLE
...
}
,
\code
{
VACUUM
}
,
\code
{
PRAGMA
}
, the
\module
{
sqlite3
}
module will commit implicitly
...
}
,
\code
{
VACUUM
}
,
\code
{
PRAGMA
}
, the
\module
{
sqlite3
}
module will commit implicitly
before executing that command. There are two reasons for doing that. The first
before executing that command. There are two reasons for doing that. The first
is that some of these commands don't work within transactions. The other reason
is that some of these commands don't work within transactions. The other reason
...
@@ -618,17 +621,17 @@ the connection yourself.
...
@@ -618,17 +621,17 @@ the connection yourself.
Using the nonstandard
\method
{
execute
}
,
\method
{
executemany
}
and
Using the nonstandard
\method
{
execute
}
,
\method
{
executemany
}
and
\method
{
executescript
}
methods of the
\class
{
Connection
}
object, your code can
\method
{
executescript
}
methods of the
\class
{
Connection
}
object, your code can
be written more concisely
, because you don't have to create the -
often
be written more concisely
because you don't have to create the (
often
superfluous
\class
{
Cursor
}
objects explicitly. Instead, the
\class
{
Cursor
}
superfluous
)
\class
{
Cursor
}
objects explicitly. Instead, the
\class
{
Cursor
}
objects are created implicitly and these shortcut methods return the cursor
objects are created implicitly and these shortcut methods return the cursor
objects. This way, you can
for example
execute a SELECT statement and iterate
objects. This way, you can execute a SELECT statement and iterate
over it directly using only a single call on the
\class
{
Connection
}
object.
over it directly using only a single call on the
\class
{
Connection
}
object.
\verbatiminput
{
sqlite3/shortcut
_
methods.py
}
\verbatiminput
{
sqlite3/shortcut
_
methods.py
}
\subsubsection
{
Accessing columns by name instead of by index
}
\subsubsection
{
Accessing columns by name instead of by index
}
One
coo
l feature of the
\module
{
sqlite3
}
module is the builtin
\class
{
sqlite3.Row
}
class
One
usefu
l feature of the
\module
{
sqlite3
}
module is the builtin
\class
{
sqlite3.Row
}
class
designed to be used as a row factory.
designed to be used as a row factory.
Rows wrapped with this class can be accessed both by index (like tuples) and
Rows wrapped with this class can be accessed both by index (like tuples) and
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment