Accept patch issue2426 by Paul Kippes (kippesp).
Adds sqlite3.Connection.iterdump to allow dumping of databases.
This commit is contained in:
parent
621cd26253
commit
b9803421d2
|
@ -378,6 +378,27 @@ A :class:`Connection` instance has the following attributes and methods:
|
||||||
deleted since the database connection was opened.
|
deleted since the database connection was opened.
|
||||||
|
|
||||||
|
|
||||||
|
.. attribute:: Connection.iterdump
|
||||||
|
|
||||||
|
Returns an iterator to dump the database in an SQL text format. Useful when
|
||||||
|
saving an in-memory database for later restoration. This function provides
|
||||||
|
the same capabilities as the :kbd:`.dump` command in the :program:`sqlite3`
|
||||||
|
shell.
|
||||||
|
|
||||||
|
.. versionadded:: 2.6
|
||||||
|
|
||||||
|
Example::
|
||||||
|
|
||||||
|
# Convert file existing_db.db to SQL dump file dump.sql
|
||||||
|
import sqlite3, os
|
||||||
|
|
||||||
|
con = sqlite3.connect('existing_db.db')
|
||||||
|
full_dump = os.linesep.join([line for line in con.iterdump()])
|
||||||
|
f = open('dump.sql', 'w')
|
||||||
|
f.writelines(full_dump)
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
|
||||||
.. _sqlite3-cursor-objects:
|
.. _sqlite3-cursor-objects:
|
||||||
|
|
||||||
Cursor Objects
|
Cursor Objects
|
||||||
|
|
|
@ -5,12 +5,13 @@ try:
|
||||||
except ImportError:
|
except ImportError:
|
||||||
raise TestSkipped('no sqlite available')
|
raise TestSkipped('no sqlite available')
|
||||||
from sqlite3.test import (dbapi, types, userfunctions, py25tests,
|
from sqlite3.test import (dbapi, types, userfunctions, py25tests,
|
||||||
factory, transactions, hooks, regression)
|
factory, transactions, hooks, regression,
|
||||||
|
dump)
|
||||||
|
|
||||||
def test_main():
|
def test_main():
|
||||||
run_unittest(dbapi.suite(), types.suite(), userfunctions.suite(),
|
run_unittest(dbapi.suite(), types.suite(), userfunctions.suite(),
|
||||||
py25tests.suite(), factory.suite(), transactions.suite(),
|
py25tests.suite(), factory.suite(), transactions.suite(),
|
||||||
hooks.suite(), regression.suite())
|
hooks.suite(), regression.suite(), dump.suite())
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
test_main()
|
test_main()
|
||||||
|
|
|
@ -362,6 +362,7 @@ Lawrence Kesteloot
|
||||||
Vivek Khera
|
Vivek Khera
|
||||||
Mads Kiilerich
|
Mads Kiilerich
|
||||||
Taek Joo Kim
|
Taek Joo Kim
|
||||||
|
Paul Kippes
|
||||||
Steve Kirsch
|
Steve Kirsch
|
||||||
Ron Klatchko
|
Ron Klatchko
|
||||||
Bastian Kleineidam
|
Bastian Kleineidam
|
||||||
|
|
|
@ -12,6 +12,9 @@ What's New in Python 2.6 alpha 2?
|
||||||
Core and builtins
|
Core and builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Patch #2426: Added sqlite3.Connection.iterdump method to allow easy dumping
|
||||||
|
of databases. Contributed by Paul Kippes at PyCon 2008.
|
||||||
|
|
||||||
- Patch #2477: Added from __future__ import unicode_literals.
|
- Patch #2477: Added from __future__ import unicode_literals.
|
||||||
|
|
||||||
- Added backport of bytearray type.
|
- Added backport of bytearray type.
|
||||||
|
|
|
@ -1199,6 +1199,52 @@ finally:
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Function author: Paul Kippes <kippesp@gmail.com>
|
||||||
|
* Class method of Connection to call the Python function _iterdump
|
||||||
|
* of the sqlite3 module.
|
||||||
|
*/
|
||||||
|
static PyObject *
|
||||||
|
pysqlite_connection_iterdump(pysqlite_Connection* self, PyObject* args)
|
||||||
|
{
|
||||||
|
PyObject* retval = NULL;
|
||||||
|
PyObject* module = NULL;
|
||||||
|
PyObject* module_dict;
|
||||||
|
PyObject* pyfn_iterdump;
|
||||||
|
|
||||||
|
if (!pysqlite_check_connection(self)) {
|
||||||
|
goto finally;
|
||||||
|
}
|
||||||
|
|
||||||
|
module = PyImport_ImportModule(MODULE_NAME ".dump");
|
||||||
|
if (!module) {
|
||||||
|
goto finally;
|
||||||
|
}
|
||||||
|
|
||||||
|
module_dict = PyModule_GetDict(module);
|
||||||
|
if (!module_dict) {
|
||||||
|
goto finally;
|
||||||
|
}
|
||||||
|
|
||||||
|
pyfn_iterdump = PyDict_GetItemString(module_dict, "_iterdump");
|
||||||
|
if (!pyfn_iterdump) {
|
||||||
|
PyErr_SetString(pysqlite_OperationalError, "Failed to obtain _iterdump() reference");
|
||||||
|
goto finally;
|
||||||
|
}
|
||||||
|
|
||||||
|
args = PyTuple_New(1);
|
||||||
|
if (!args) {
|
||||||
|
goto finally;
|
||||||
|
}
|
||||||
|
Py_INCREF(self);
|
||||||
|
PyTuple_SetItem(args, 0, (PyObject*)self);
|
||||||
|
retval = PyObject_CallObject(pyfn_iterdump, args);
|
||||||
|
|
||||||
|
finally:
|
||||||
|
Py_XDECREF(args);
|
||||||
|
Py_XDECREF(module);
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
pysqlite_connection_create_collation(pysqlite_Connection* self, PyObject* args)
|
pysqlite_connection_create_collation(pysqlite_Connection* self, PyObject* args)
|
||||||
{
|
{
|
||||||
|
@ -1344,6 +1390,8 @@ static PyMethodDef connection_methods[] = {
|
||||||
PyDoc_STR("Creates a collation function. Non-standard.")},
|
PyDoc_STR("Creates a collation function. Non-standard.")},
|
||||||
{"interrupt", (PyCFunction)pysqlite_connection_interrupt, METH_NOARGS,
|
{"interrupt", (PyCFunction)pysqlite_connection_interrupt, METH_NOARGS,
|
||||||
PyDoc_STR("Abort any pending database operation. Non-standard.")},
|
PyDoc_STR("Abort any pending database operation. Non-standard.")},
|
||||||
|
{"iterdump", (PyCFunction)pysqlite_connection_iterdump, METH_NOARGS,
|
||||||
|
PyDoc_STR("Returns iterator to the dump of the database in an SQL text format.")},
|
||||||
{"__enter__", (PyCFunction)pysqlite_connection_enter, METH_NOARGS,
|
{"__enter__", (PyCFunction)pysqlite_connection_enter, METH_NOARGS,
|
||||||
PyDoc_STR("For context manager. Non-standard.")},
|
PyDoc_STR("For context manager. Non-standard.")},
|
||||||
{"__exit__", (PyCFunction)pysqlite_connection_exit, METH_VARARGS,
|
{"__exit__", (PyCFunction)pysqlite_connection_exit, METH_VARARGS,
|
||||||
|
|
Loading…
Reference in New Issue