Accept patch issue2426 by Paul Kippes (kippesp).

Adds sqlite3.Connection.iterdump to allow dumping of databases.
This commit is contained in:
Gregory P. Smith 2008-03-28 08:32:09 +00:00
parent 621cd26253
commit b9803421d2
5 changed files with 76 additions and 2 deletions

View File

@ -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

View File

@ -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()

View File

@ -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

View File

@ -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.

View File

@ -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,