# Mimic the sqlite3 console shell's .dump command# Author: Paul Kippes <kippesp@gmail.com># Every identifier in sql is quoted based on a comment in sqlite# documentation "SQLite adds new keywords from time to time when it# takes on new features. So to prevent your code from being broken by# future enhancements, you should normally quote any identifier that# is an English language word, even if you do not have to."def _iterdump(connection):"""Returns an iterator to the dump of the database in an SQL text format.Used to produce an SQL dump of the database. Useful to save an in-memorydatabase for later restoration. This function should not be calleddirectly but instead called from the Connection method, iterdump()."""cu = connection.cursor()yield('BEGIN TRANSACTION;')# sqlite_master table contains the SQL CREATE statements for the database.q = """SELECT "name", "type", "sql"FROM "sqlite_master"WHERE "sql" NOT NULL AND"type" == 'table'ORDER BY "name""""schema_res = cu.execute(q)for table_name, type, sql in schema_res.fetchall():if table_name == 'sqlite_sequence':yield('DELETE FROM "sqlite_sequence";')elif table_name == 'sqlite_stat1':yield('ANALYZE "sqlite_master";')elif table_name.startswith('sqlite_'):continue# NOTE: Virtual table support not implemented#elif sql.startswith('CREATE VIRTUAL TABLE'):# qtable = table_name.replace("'", "''")# yield("INSERT INTO sqlite_master(type,name,tbl_name,rootpage,sql)"\# "VALUES('table','{0}','{0}',0,'{1}');".format(# qtable,# sql.replace("''")))else:yield('{0};'.format(sql))# Build the insert statement for each row of the current tabletable_name_ident = table_name.replace('"', '""')res = cu.execute('PRAGMA table_info("{0}")'.format(table_name_ident))column_names = [str(table_info[1]) for table_info in res.fetchall()]q = """SELECT 'INSERT INTO "{0}" VALUES({1})' FROM "{0}";""".format(table_name_ident,",".join("""'||quote("{0}")||'""".format(col.replace('"', '""')) for col in column_names))query_res = cu.execute(q)for row in query_res:yield("{0};".format(row[0]))# Now when the type is 'index', 'trigger', or 'view'q = """SELECT "name", "type", "sql"FROM "sqlite_master"WHERE "sql" NOT NULL AND"type" IN ('index', 'trigger', 'view')"""schema_res = cu.execute(q)for name, type, sql in schema_res.fetchall():yield('{0};'.format(sql))yield('COMMIT;')
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。