Mercurial > cpython-lru_cache-weakref
annotate Lib/sqlite3/dump.py @ 80661:94de77bd0b4b 2.7
Issue #16194: document imp.load_dynamic problems
when read several extension modules from the same binary object file.
| author | Andrew Svetlov <andrew.svetlov@gmail.com> |
|---|---|
| date | Thu, 29 Nov 2012 19:51:28 +0200 |
| parents | 60aa7dacb605 |
| children | 2cdb599172ab |
| 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 |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
4 # Every identifier in sql is quoted based on a comment in sqlite |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
5 # documentation "SQLite adds new keywords from time to time when it |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
6 # takes on new features. So to prevent your code from being broken by |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
7 # future enhancements, you should normally quote any identifier that |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
8 # is an English language word, even if you do not have to." |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
9 |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
10 def _iterdump(connection): |
|
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 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
|
13 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
14 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
|
15 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
|
16 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
|
17 """ |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
18 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
19 cu = connection.cursor() |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
20 yield('BEGIN TRANSACTION;') |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
21 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
22 # 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
|
23 q = """ |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
24 SELECT "name", "type", "sql" |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
25 FROM "sqlite_master" |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
26 WHERE "sql" NOT NULL AND |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
27 "type" == 'table' |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
28 """ |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
29 schema_res = cu.execute(q) |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
30 for table_name, type, sql in sorted(schema_res.fetchall()): |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
31 if table_name == 'sqlite_sequence': |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
32 yield('DELETE FROM "sqlite_sequence";') |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
33 elif table_name == 'sqlite_stat1': |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
34 yield('ANALYZE "sqlite_master";') |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
35 elif table_name.startswith('sqlite_'): |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
36 continue |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
37 # NOTE: Virtual table support not implemented |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
38 #elif sql.startswith('CREATE VIRTUAL TABLE'): |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
39 # qtable = table_name.replace("'", "''") |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
40 # yield("INSERT INTO sqlite_master(type,name,tbl_name,rootpage,sql)"\ |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
41 # "VALUES('table','{0}','{0}',0,'{1}');".format( |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
42 # qtable, |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
43 # sql.replace("''"))) |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
44 else: |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
45 yield('{0};'.format(sql)) |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
46 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
47 # Build the insert statement for each row of the current table |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
48 table_name_ident = table_name.replace('"', '""') |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
49 res = cu.execute('PRAGMA table_info("{0}")'.format(table_name_ident)) |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
50 column_names = [str(table_info[1]) for table_info in res.fetchall()] |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
51 q = """SELECT 'INSERT INTO "{0}" VALUES({1})' FROM "{0}";""".format( |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
52 table_name_ident, |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
53 ",".join("""'||quote("{0}")||'""".format(col.replace('"', '""')) for col in column_names)) |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
54 query_res = cu.execute(q) |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
55 for row in query_res: |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
56 yield("{0};".format(row[0])) |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
57 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
58 # 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
|
59 q = """ |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
60 SELECT "name", "type", "sql" |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
61 FROM "sqlite_master" |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
62 WHERE "sql" NOT NULL AND |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
63 "type" IN ('index', 'trigger', 'view') |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
64 """ |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
65 schema_res = cu.execute(q) |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
66 for name, type, sql in schema_res.fetchall(): |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
67 yield('{0};'.format(sql)) |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
68 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
69 yield('COMMIT;') |
