Sqlite

SQLite:選擇一個唯一的分隔符

  • October 31, 2019

我正在開發一個項目,該項目將產生一個大約 6 GB 文本內容(編碼為 UTF-8)的 SQLite 數據庫。文本將是多種多樣的:它將有大量的純文字書寫,但也有大量的特殊字元(波浪號、反引號、節符號、mdash’s、endash’s 等)。還會有數學公式。

看起來.import將是載入方法。

問題:我可以將什麼用作.separator文本中沒有的值?

我已經用一些想法對未來的文本進行了篩選,並且沒有確定不在實際內容中的分隔符。

我想我可以逃避文本中可能存在的任何分隔符。但如果可以的話,我寧願避免這種選擇。

我正要建議使用多字元分隔符或外語字元(例如),但.separator不允許使用多字元串甚至多字節字元。

我會使用一個多字元分隔符,在要導入的文本中出現機率非常低,然後使用自定義腳本解析文件。這是 Python3 中$$$$$$用作分隔符的範例,但[ŠĐć~^˘°˛˙€]如果需要,請考慮類似字元串。

導入.csv

hello $$$$$$ world $$$$$$ 1
foo   $$$$$$ bar   $$$$$$ 2

sqliteimport.py

import sqlite3

import_file_name = "import.csv"
cell_separator = "$$$$$$"
lines = []
insert_query = "INSERT INTO imported (a, b, c) VALUES (?, ?, ?);"
db_connection = sqlite3.connect("database.sqlite")
db_cursor = db_connection.cursor()
db_cursor.execute("CREATE TABLE imported (a TEXT, b TEXT, c INTEGER);")
db_cursor.execute("BEGIN TRANSACTION")
with open(import_file_name, 'r') as import_file:
   for line in import_file:
       # Split each line at each cell_separator into a list of strings.
       # Strip each one of the columns to remove whitespaces.
       cleaned_columns = [column.strip()
                          for column in line.split(cell_separator)]
       db_cursor.execute(insert_query, tuple(cleaned_columns))
db_connection.commit()
db_cursor.execute("VACUUM;")
db_cursor.close()
db_connection.close()

您可以使用控製字元作為分隔符,例如

.separator ^A ^B

其中 ^A 和 ^B 應替換為相應的控製字元。

引用自:https://dba.stackexchange.com/questions/124524