Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
a22a1274
Commit
a22a1274
authored
Nov 07, 2017
by
Anders Lorentsen
Committed by
Victor Stinner
Nov 06, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bpo-31843: sqlite3.connect() now accepts PathLike objects as database name (#4299)
parent
edb13ae4
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
32 additions
and
7 deletions
+32
-7
Doc/library/sqlite3.rst
Doc/library/sqlite3.rst
+10
-3
Lib/sqlite3/test/dbapi.py
Lib/sqlite3/test/dbapi.py
+11
-0
Misc/NEWS.d/next/Library/2017-11-07-00-37-50.bpo-31843.lM2gkR.rst
...S.d/next/Library/2017-11-07-00-37-50.bpo-31843.lM2gkR.rst
+2
-0
Modules/_sqlite/connection.c
Modules/_sqlite/connection.c
+7
-2
Modules/_sqlite/module.c
Modules/_sqlite/module.c
+2
-2
No files found.
Doc/library/sqlite3.rst
View file @
a22a1274
...
...
@@ -172,9 +172,13 @@ Module functions and constants
.. function:: connect(database[, timeout, detect_types, isolation_level, check_same_thread, factory, cached_statements, uri])
Opens a connection to the SQLite database file *database*. You can use
``":memory:"`` to open a database connection to a database that resides in RAM
instead of on disk.
Opens a connection to the SQLite database file *database*. By default returns a
:class:`Connection` object, unless a custom *factory* is given.
*database* is a :term:`path-like object` giving the pathname (absolute or
relative to the current working directory) of the database file to be opened.
You can use ``":memory:"`` to open a database connection to a database that
resides in RAM instead of on disk.
When a database is accessed by multiple connections, and one of the processes
modifies the database, the SQLite database is locked until that transaction is
...
...
@@ -223,6 +227,9 @@ Module functions and constants
.. versionchanged:: 3.4
Added the *uri* parameter.
.. versionchanged:: 3.7
*database* can now also be a :term:`path-like object`, not only a string.
.. function:: register_converter(typename, callable)
...
...
Lib/sqlite3/test/dbapi.py
View file @
a22a1274
...
...
@@ -160,6 +160,17 @@ class ConnectionTests(unittest.TestCase):
with
self
.
assertRaises
(
AttributeError
):
self
.
cx
.
in_transaction
=
True
def
CheckOpenWithPathLikeObject
(
self
):
""" Checks that we can succesfully connect to a database using an object that
is PathLike, i.e. has __fspath__(). """
self
.
addCleanup
(
unlink
,
TESTFN
)
class
Path
:
def
__fspath__
(
self
):
return
TESTFN
path
=
Path
()
with
sqlite
.
connect
(
path
)
as
cx
:
cx
.
execute
(
'create table test(id integer)'
)
def
CheckOpenUri
(
self
):
if
sqlite
.
sqlite_version_info
<
(
3
,
7
,
7
):
with
self
.
assertRaises
(
sqlite
.
NotSupportedError
):
...
...
Misc/NEWS.d/next/Library/2017-11-07-00-37-50.bpo-31843.lM2gkR.rst
0 → 100644
View file @
a22a1274
*database* argument of sqlite3.connect() now accepts a
:term:`path-like object`, instead of just a string.
Modules/_sqlite/connection.c
View file @
a22a1274
...
...
@@ -76,6 +76,7 @@ int pysqlite_connection_init(pysqlite_Connection* self, PyObject* args, PyObject
};
char
*
database
;
PyObject
*
database_obj
;
int
detect_types
=
0
;
PyObject
*
isolation_level
=
NULL
;
PyObject
*
factory
=
NULL
;
...
...
@@ -85,14 +86,16 @@ int pysqlite_connection_init(pysqlite_Connection* self, PyObject* args, PyObject
double
timeout
=
5
.
0
;
int
rc
;
if
(
!
PyArg_ParseTupleAndKeywords
(
args
,
kwargs
,
"
s
|diOiOip"
,
kwlist
,
&
database
,
&
timeout
,
&
detect_types
,
if
(
!
PyArg_ParseTupleAndKeywords
(
args
,
kwargs
,
"
O&
|diOiOip"
,
kwlist
,
PyUnicode_FSConverter
,
&
database_obj
,
&
timeout
,
&
detect_types
,
&
isolation_level
,
&
check_same_thread
,
&
factory
,
&
cached_statements
,
&
uri
))
{
return
-
1
;
}
database
=
PyBytes_AsString
(
database_obj
);
self
->
initialized
=
1
;
self
->
begin_statement
=
NULL
;
...
...
@@ -124,6 +127,8 @@ int pysqlite_connection_init(pysqlite_Connection* self, PyObject* args, PyObject
#endif
Py_END_ALLOW_THREADS
Py_DECREF
(
database_obj
);
if
(
rc
!=
SQLITE_OK
)
{
_pysqlite_seterror
(
self
->
db
,
NULL
);
return
-
1
;
...
...
Modules/_sqlite/module.c
View file @
a22a1274
...
...
@@ -55,7 +55,7 @@ static PyObject* module_connect(PyObject* self, PyObject* args, PyObject*
"check_same_thread"
,
"factory"
,
"cached_statements"
,
"uri"
,
NULL
};
char
*
database
;
PyObject
*
database
;
int
detect_types
=
0
;
PyObject
*
isolation_level
;
PyObject
*
factory
=
NULL
;
...
...
@@ -66,7 +66,7 @@ static PyObject* module_connect(PyObject* self, PyObject* args, PyObject*
PyObject
*
result
;
if
(
!
PyArg_ParseTupleAndKeywords
(
args
,
kwargs
,
"
s
|diOiOip"
,
kwlist
,
if
(
!
PyArg_ParseTupleAndKeywords
(
args
,
kwargs
,
"
O
|diOiOip"
,
kwlist
,
&
database
,
&
timeout
,
&
detect_types
,
&
isolation_level
,
&
check_same_thread
,
&
factory
,
&
cached_statements
,
&
uri
))
...
...
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