Выполнять команды sqlite3 «dot» из Python или сортировать регистры в утилите командной строки

Моя база данных sqlite3 содержит ограничение столбца «collate». Я поместил его в схему для таблицы, чтобы предотвратить случайное пренебрежение использованием необходимой сортировки. Однако это означает, что при запуске sqlite3 из командной строки, а не из моего кода Python, сопоставление, указанное в схеме, отсутствует, и я не могу использовать точечные команды.

 sqlite> .import data.txt table_name Error: no such collation sequence: my_collation 

Кроме того, создание соединения с Python и добавление требуемой сортировки запускаются в эту проблему:

 connWithCollation.execute(".import data.txt table_name") Traceback (most recent call last): File "<stdin>", line 1, in <module> sqlite3.OperationalError: near ".": syntax error 

Функция execute которая будет отображаться, не хочет передавать команду sqlite3 dot.

Как я могу выполнить команды sqlite3 dot, если необходимые функции сортировки отсутствуют? В качестве альтернативы, как я могу выполнить команды sqlite3 dot из Python?

  • Python, Sqlite3 - Как преобразовать список в ячейку BLOB
  • Перемещение между базами данных на диске и быстрой базой данных в памяти?
  • Python sqlite3 и параллелизм
  • Python: как вставить словарь в базу данных sqlite?
  • Удаление строк из базы данных с помощью флагов python?
  • Каковы реальные уровни абстракции базы данных для Python
  • Python: преобразовать «список кортежей» в 1 плоский список или 1 матрицу
  • Присоединение к модулю sqlite Pythons выполняется медленнее, чем вручную
  • 4 Solutions collect form web for “Выполнять команды sqlite3 «dot» из Python или сортировать регистры в утилите командной строки”

    Вы можете загружать новые последовательности и функции сортировки с помощью функции load_extension () встроенной функции SQLite или .load в командной строке для SQLite. Очевидно, что расширения можно записать в C.

    И вы не можете вызывать dot-команды из python, потому что dot-команды относятся к инструменту командной строки командной строки.

    Команда .import в оболочке sqlite является встроенной командой. Он обрабатывается программой оболочки, а не механизмом SQL, поэтому вы не можете выполнять ее, как инструкцию SQL.

    Чтение кода для shell.c для SQLite. Кажется , что .import – это просто цикл, считывание строк из файла данных, разделение на разделителе и передача полей в качестве значений параметров в подготовленный оператор INSERT . Таким образом, вы должны легко имитировать поведение .import с кодом Python.

    Я проверил следующее с Python 2.6:

     import sqlite3 import csv conn = sqlite3.connect(':memory:') conn.execute('create table mytable (col1 text, col2 text, col3 text)') csvReader = csv.reader(open('mydata.csv'), delimiter=',', quotechar='"') for row in csvReader: conn.execute('insert into mytable (col1, col2, col3) values (?, ?, ?)', row) cur = conn.cursor() cur.execute('select * from mytable') print cur.fetchall() 

    Команды точек доступны только для исполняемого файла sqlite3 . Вам придется заменить их эквивалентной комбинацией кода Python и вызовов DB-API, чтобы имитировать их поведение.

    Вы можете вызвать команды точек из Python, используя модуль подпроцесса, который в основном вызывает оболочку. Если вам нужно использовать несколько команд точек, вы можете передать их в виде отдельных аргументов оболочки – использование точки с запятой для их разделения не будет работать.

     import subprocess subprocess.call(["sqlite3", "xxx.db", ".mode tabs", ".import file.tsv table_name"]) 
    Interesting Posts
    Python - лучший язык программирования в мире.