Mercurial > cpython-lru_cache-weakref
annotate Lib/sqlite3/dump.py @ 49955:878d40468c4e legacy-trunk
Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
| author | Vinay Sajip <vinay_sajip@yahoo.co.uk> |
|---|---|
| date | Wed, 03 Dec 2008 23:22:58 +0000 |
| parents | 872abed7d069 |
| children | 60aa7dacb605 |
| rev | line source |
|---|---|
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
1 # Mimic the sqlite3 console shell's .dump command |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
2 # Author: Paul Kippes <kippesp@gmail.com> |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
3 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
4 def _iterdump(connection): |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
5 """ |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
6 Returns an iterator to the dump of the database in an SQL text format. |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
7 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
8 Used to produce an SQL dump of the database. Useful to save an in-memory |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
9 database for later restoration. This function should not be called |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
10 directly but instead called from the Connection method, iterdump(). |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
11 """ |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
12 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
13 cu = connection.cursor() |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
14 yield('BEGIN TRANSACTION;') |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
15 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
16 # sqlite_master table contains the SQL CREATE statements for the database. |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
17 q = """ |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
18 SELECT name, type, sql |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
19 FROM sqlite_master |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
20 WHERE sql NOT NULL AND |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
21 type == 'table' |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
22 """ |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
23 schema_res = cu.execute(q) |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
24 for table_name, type, sql in schema_res.fetchall(): |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
25 if table_name == 'sqlite_sequence': |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
26 yield('DELETE FROM sqlite_sequence;') |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
27 elif table_name == 'sqlite_stat1': |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
28 yield('ANALYZE sqlite_master;') |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
29 elif table_name.startswith('sqlite_'): |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
30 continue |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
31 # NOTE: Virtual table support not implemented |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
32 #elif sql.startswith('CREATE VIRTUAL TABLE'): |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
33 # qtable = table_name.replace("'", "''") |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
34 # yield("INSERT INTO sqlite_master(type,name,tbl_name,rootpage,sql)"\ |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
35 # "VALUES('table','%s','%s',0,'%s');" % |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
36 # qtable, |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
37 # qtable, |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
38 # sql.replace("''")) |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
39 else: |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
40 yield('%s;' % sql) |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
41 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
42 # Build the insert statement for each row of the current table |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
43 res = cu.execute("PRAGMA table_info('%s')" % table_name) |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
44 column_names = [str(table_info[1]) for table_info in res.fetchall()] |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
45 q = "SELECT 'INSERT INTO \"%(tbl_name)s\" VALUES(" |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
46 q += ",".join(["'||quote(" + col + ")||'" for col in column_names]) |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
47 q += ")' FROM '%(tbl_name)s'" |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
48 query_res = cu.execute(q % {'tbl_name': table_name}) |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
49 for row in query_res: |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
50 yield("%s;" % row[0]) |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
51 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
52 # Now when the type is 'index', 'trigger', or 'view' |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
53 q = """ |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
54 SELECT name, type, sql |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
55 FROM sqlite_master |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
56 WHERE sql NOT NULL AND |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
57 type IN ('index', 'trigger', 'view') |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
58 """ |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
59 schema_res = cu.execute(q) |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
60 for name, type, sql in schema_res.fetchall(): |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
61 yield('%s;' % sql) |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
62 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
63 yield('COMMIT;') |
