Как я могу сбросить одну таблицу 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) 

  • sqlite3.OperationalError: нет такого столбца:
  • Как написать кадр данных Pandas на sqlite с индексом
  • Как получить вставленный идентификатор после вставки строки в SQLite с помощью Python?
  • Почему SQLAlchemy вставляет sqlite в 25 раз медленнее, чем использование sqlite3 напрямую?
  • Как вы избегаете строк для имен таблицы / столбцов SQLite в Python?
  • Присоединение к модулю sqlite Pythons выполняется медленнее, чем вручную
  • Каков оптимизированный способ вставки большого количества записей (более 40 000) в sqlite3
  • sqlite удалить символы un utf-8
  • 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) 

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

    Interesting Posts

    pandas вне границ наносекундной метки времени после смещения rollforward плюс добавление смещения месяца

    Как войти на сайт с помощью python и механизировать

    не заменяет все вхождения

    Модели python stats – квадратичный член в регрессии

    hasattr () против блока try-except для обработки несуществующих атрибутов

    Принудительное затмение для перезагрузки модулей Python

    Проверка входа в систему и аутентификация?

    Как найти перекрытие между 2 последовательностями и вернуть его

    Как изменить размер шрифта тиков объекта axes в matplotlib

    Внедрение сервера

    Как добавить собственные пользовательские атрибуты в существующие встроенные типы Python? Как строка?

    Как я могу использовать Homebrew для установки Python 2 и 3 на Mac?

    Загрузка ключа RSA с кодировкой DER с использованием M2Crypto

    Получить текущий URL-адрес браузера с помощью python

    Как конвертировать python datetime.datetime, чтобы увеличить серийный номер даты

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