Как я могу сбросить одну таблицу sqlite3 в python?

Я хотел бы сбросить только одну таблицу, но по внешнему виду для этого нет никакого параметра.

Я нашел этот пример дампа, но есть для всех таблиц:

# Convert file existing_db.db to SQL dump file dump.sql import sqlite3, os con = sqlite3.connect('existing_db.db') with open('dump.sql', 'w') as f: for line in con.iterdump(): f.write('%s\n' % line) 

3 Solutions collect form web for “Как я могу сбросить одну таблицу sqlite3 в python?”

Вы можете скопировать только одну таблицу в память db:

 import sqlite3 def getTableDump(db_file, table_to_dump): conn = sqlite3.connect(':memory:') cu = conn.cursor() cu.execute("attach database '" + db_file + "' as attached_db") cu.execute("select sql from attached_db.sqlite_master " "where type='table' and name='" + table_to_dump + "'") sql_create_table = cu.fetchone()[0] cu.execute(sql_create_table); cu.execute("insert into " + table_to_dump + " select * from attached_db." + table_to_dump) conn.commit() cu.execute("detach database attached_db") return "\n".join(conn.iterdump()) TABLE_TO_DUMP = 'table_to_dump' DB_FILE = 'db_file' print getTableDump(DB_FILE, TABLE_TO_DUMP) 

Pro : Простота и надежность: вам не нужно переписывать какой-либо библиотечный метод, и вы более уверены, что код совместим с будущими версиями модуля sqlite3.

Con : Вам нужно загрузить всю таблицу в памяти, что может быть или не быть большим делом в зависимости от того, насколько велика таблица и сколько памяти доступно.

Реализация Dump лежит здесь http://coverage.livinglogic.de/Lib/sqlite3/dump.py.html (локальный путь: PythonPath / Lib / sqlite3 / dump.py)

Вы можете немного изменить его:

 # Mimic the sqlite3 console shell's .dump command # Author: Paul Kippes <kippesp@gmail.com> def _iterdump(connection, table_name): """ 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-memory database for later restoration. This function should not be called directly but instead called from the Connection method, iterdump(). """ cu = connection.cursor() table_name = table_name 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' AND name == :table_name """ schema_res = cu.execute(q, {'table_name': table_name}) 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 else: yield('%s;' % sql) # Build the insert statement for each row of the current table res = cu.execute("PRAGMA table_info('%s')" % table_name) column_names = [str(table_info[1]) for table_info in res.fetchall()] q = "SELECT 'INSERT INTO \"%(tbl_name)s\" VALUES(" q += ",".join(["'||quote(" + col + ")||'" for col in column_names]) q += ")' FROM '%(tbl_name)s'" query_res = cu.execute(q % {'tbl_name': table_name}) for row in query_res: yield("%s;" % 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('%s;' % sql) yield('COMMIT;') 

Теперь он принимает имя таблицы как второй аргумент.
Вы можете использовать его следующим образом:

 with open('dump.sql', 'w') as f: for line in _iterdump(con, 'GTS_vehicle'): f.write('%s\n' % line) 

Получит что-то вроде:

 BEGIN TRANSACTION; CREATE TABLE "GTS_vehicle" ("id" integer NOT NULL PRIMARY KEY, "name" varchar(20) NOT NULL, "company_id" integer NULL, "license_plate" varchar(20) NULL, "icon" varchar(100) NOT NULL DEFAULT 'baseicon.png', "car_brand" varchar(30) NULL, "content_type_id" integer NULL, "modemID" varchar(100) NULL, "distance" integer NULL, "max_speed" integer NULL DEFAULT 100, "max_rpm" integer NULL DEFAULT 4000, "fuel_tank_volume" integer NULL DEFAULT 70, "max_battery_voltage" integer NULL, "creation_date" datetime NOT NULL, "last_RFID" text NULL); INSERT INTO "GTS_vehicle" VALUES(1,'lan1_op1_car1',1,'03115','baseicon.png','UFP',16,'lan_op1_car1',NULL,100,4000,70,12,'2011-06-23 11:54:32.395000',NULL); INSERT INTO "GTS_vehicle" VALUES(2,'lang_op1_car2',1,'03','baseicon.png','ыва',16,'lan_op1_car2',NULL,100,4000,70,12,'2011-06-23 11:55:02.372000',NULL); INSERT INTO "GTS_vehicle" VALUES(3,'lang_sup_car1',1,'0000','baseicon.png','Fiat',16,'lan_sup_car1',NULL,100,4000,70,12,'2011-06-23 12:32:09.017000',NULL); INSERT INTO "GTS_vehicle" VALUES(4,'lang_sup_car2',1,'123','baseicon.png','ЗАЗ',16,'lan_sup_car2',NULL,100,4000,70,12,'2011-06-23 12:31:38.108000',NULL); INSERT INTO "GTS_vehicle" VALUES(9,'lang_op2_car1',1,'','baseicon.png','',16,'1233211234',NULL,100,4000,70,12,'2011-07-05 13:32:09.865000',NULL); INSERT INTO "GTS_vehicle" VALUES(11,'Big RIder',1,'','baseicon.png','0311523',16,'111',NULL,100,4000,70,20,'2011-07-07 12:12:40.358000',NULL); COMMIT; 

С помощью iterdump () вся информация будет отображаться следующим образом:

 INSERT INTO "name" VALUES(1, 'John') INSERT INTO "name" VALUES(2, 'Jane') INSERT INTO "phone" VALUES(1, '111000') INSERT INTO "phone" VALUES(2, '111001') 

Простым способом является фильтрация определенных ключевых слов методом string.startswith (). Например, имя таблицы – «телефон»:

 # Convert file existing_db.db to SQL dump file dump.sql import sqlite3, os con = sqlite3.connect('existing_db.db') with open('dump.sql', 'w') as f: for line in con.iterdump(): if line.startswith('INSERT INTO "phone"'): f.write('%s\n' % line) 

Не очень умный, но может соответствовать вашей цели.

  • Исключения модуля sqlite3 на Python - где находится документация?
  • как удалить u из sqlite3 cursor.fetchall () в python
  • Слияние баз данных SQLite сводит меня с ума. Помогите?
  • Хранить данные SQLite 3 как переменную в Python
  • Сравнение двух таблиц sqlite3 с использованием python
  • Python Sqlite3 - данные не сохраняются постоянно
  • Python sqlite3.OperationalError: нет такой таблицы:
  • совместное использование: memory: database между различными потоками в python с использованием пакета sqlite3
  •  
    Interesting Posts for Van-Lav

    Создание формы Auto Complete в Google App Engine

    Почему FrozenList отличается от кортежа?

    Почему (1 в == Истина) оценивается в False?

    Использование ввода utf-8 для модуля cmd Python

    Как читать данные из Excel и записывать их в текстовый файл по строкам?

    Тестирование аргументов Truthy или Falsy передается через функцию в оператор if

    Как я могу изменить язык администратора Django?

    Доступ к вложенным словарным элементам через список ключей?

    Как добавить дополнительные пары ключ-значение в dict (), построенный с помощью аргумента генератора?

    Uhandled ошибка в pysnmp витой клиент с более чем 1000 хостов

    Разбор вложенных вызовов функций с использованием pyparsing

    Есть ли способ обфускации / скрыть командную строку из диспетчера задач Windows с помощью winappdbg?

    Веб-скребок для динамических форм в python

    Преобразование выражения, указанного в префиксной нотации, определение общих подвыражений и зависимостей

    Сортировка массива строк с отрицательными номерами?

    Python - лучший язык программирования в мире.